我想创建一个不通过引用传递std :: string的函数来修改,
void changeStr(std::string &str)
{
str = "Hello World!";
}
,而是整个固定大小的std :: strings数组(该函数将完全相同:将一些特定字符串属性赋予数组中的每个空格)。但我不知道哪种语法是合适的......
答案 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函数需要知道大小,则需要将其作为大小参数传递。 请注意,我个人更喜欢使用矢量。