我有一个带有一些值的数组,但我不知道有多少值。我想将每个值作为参数传递:
char const*[] array = {"foo","bar",.../*some other objects*/};
something(array.somethingThatTurnsThisIntoArguments());
这可能吗?此外,函数something()
是不可更改的,因此我无法使用std::vector
答案 0 :(得分:0)
在这种情况下,您应该更喜欢使用std::vector<T>
或std::array<T,N>
,其中T是数据类型,N是指定std::array
数组大小的整数。基于你所写的内容,这两个中的任何一个都可以为你工作,尽管前者可以动态地增长和缩小,后者将具有固定的大小。您可以为每个对象列表分配类似于您在问题中的操作,然后将它们作为函数参数传递,而不需要使用正确的函数参数进行任何额外的操作,如下所示:
void somethingToDo(const std::vector<std::string> &vec) {
//do something with vec
}
// code
std::vector<std::string> v = {"a","b","c"};
somethingToDo(v);
此外,我建议您使用std::string
而不是char *
或const char *
来处理字符串。
现在,在问题的第二部分,您可以通过调用每个size()
成员函数来获取这些数组类型对象的大小(即它们包含的对象数)。即使您不知道阵列中有多少个对象,这些对象也会为您跟踪它们的大小。然后,您可以在将数组类型传递给的函数中随时查询其大小。