我想创建一个函数,它不通过引用传递 std::string 以进行修改,
void changeStr(std::string &str)
{
str = "Hello World!";
}
,而是一个完整的、固定大小的 std::strings 数组(该函数将执行完全相同的操作:将一些特定的字符串分配给数组中的每个空间)。但我不知道哪个是合适的语法......
由于您使用的是 C++,因此您可能希望通过引用传递一组值,而不是通过引用传递一组引用。实现这一目标的最简单方法是使用std::vector<T>
void changeStr(std::vector<std::string>& collection) {
if (collection.size() > 0) {
collection[0] = "hello world";
}
}
一种方法是传递对数组大小的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
}
请注意,此处需要模板以允许该函数使用不同大小的固定大小的数组。该模板允许您保留尺寸信息,而不必担心它的实际值。
就是这样!
//Change the 10 to whatever size you'd like
void changeStr(std::string (&str)[10]) {
}
这当然是针对静态大小的,但是,其他答案是更好的方法,可以灵活地完成您需要的事情。
void changeStr(std::string pStrings[], int num)
您可以传递任何大小的任何 C 数组。如果 changeStr 函数需要知道大小,则需要将其作为大小参数传递。请注意,我个人更喜欢使用向量。