通过引用传递一个std :: string数组

时间:2013-07-24 21:36:01

标签: c++ arrays string

我想创建一个不通过引用传递std :: string的函数来修改,

void changeStr(std::string &str)
{
    str = "Hello World!";
}

,而是整个固定大小的std :: strings数组(该函数将完全相同:将一些特定字符串属性赋予数组中的每个空格)。但我不知道哪种语法是合适的......

4 个答案:

答案 0 :(得分:7)

由于您使用的是C ++,因此您可能希望通过引用传递一组值,而不是通过引用传递一组引用。实现此目的的最简单方法是使用std::vector<T>

void changeStr(std::vector<std::string>& collection) { 
  if (collection.size() > 0) {
    collection[0] = "hello world";
  }
}

答案 1 :(得分:6)

一种方法是将引用传递给std::array<std::string, N>,其中N是数组的大小。您可以使用函数模板推导出N

#include <array>

template <size_t N>
void changeStr(std::array<std::string, N>& strings)
{
  // access strings[i] for i >= 0 and i < N
}

或者,您可以再次使用函数模板传递固定大小的普通数组:

template<size_t N >
void changeStr( std::string (&strings)[N] )
{
   // access strings[i] for i >= 0 and i < N
}

请注意,此处需要模板以允许该函数使用不同大小的固定大小的数组。该模板允许您保留大小信息,而不必担心它的实际值。

答案 2 :(得分:5)

这是怎么回事!

//Change the 10 to whatever size you'd like
void changeStr(std::string (&str)[10]) {
}

当然,这是针对静态大小的,但其他答案是更好的方法,可以灵活地完成您的需要。

答案 3 :(得分:1)

void changeStr(std::string pStrings[], int num)

您可以传递任何大小的任何C数组。如果changeStr函数需要知道大小,则需要将其作为大小参数传递。 请注意,我个人更喜欢使用矢量。