2

我想创建一个函数,它不通过引用传递 std::string 以进行修改,

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

,而是一个完整的、固定大小的 std::strings 数组(该函数将执行完全相同的操作:将一些特定的字符串分配给数组中的每个空间)。但我不知道哪个是合适的语法......

4

4 回答 4

9

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

void changeStr(std::vector<std::string>& collection) { 
  if (collection.size() > 0) {
    collection[0] = "hello world";
  }
}
于 2013-07-24T21:39:38.013 回答
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
}

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

于 2013-07-24T21:38:32.140 回答
6

就是这样!

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

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

于 2013-07-24T21:38:54.913 回答
1
void changeStr(std::string pStrings[], int num)

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

于 2013-07-24T23:36:46.943 回答