如果我声明这样的向量,
vector <int> v[100];
如何将其传递给函数并在该函数中作为参数接收?
我尝试使用它,
void foo(vector <int>& v) {
..
}
main() {
..
foo(v);
}
答案 0 :(得分:0)
首先,如果要使用较新的C ++版本,请使用typedef
,或者最好使用using
。
typedef vector<int> twoD_vector[100];
// or alternatively (better)
using twoD_vector = vector<int>[100];
然后,不要使用旧式C数组([100])。使用std :: array(或boost :: array)代替。它具有std::iterators
,具有std::container
界面,具有边界检查array.at(idx)
并具有其他良好功能。
typedef std::array<std::vector<int>, 100> twoD_vector;
使用新的twoD_vector
类型的用法很简单,
twoD_vector v;
void foo(twoD_vector &val)
{
// iterate over the 100 'outer' elements
for (size_t i=0; i<val.size(); ++i) {
// iterate over each element of the inner vector
std::vector<int> &inner_vector(val[i]);
printf("%u: size is %u", i, inner_vector.size());
for (size_t j=0; j<inner_vector.size(); ++j) {
// do something with the integer
printf("inner vector[%u] has value %d\n", j, inner_vector[j]);
}
}
}
void main()
{
foo(v);
}
P.S。这是我的直觉,代码片段中可能有语法或程序错误,但这应该可以给您带来启发。
答案 1 :(得分:0)
您拥有的是一个向量数组,这很好,因为其中一个维度固定为100。
我建议实际使用2d向量:
std::vector<std::vector<int>> v;
void foo(std::vector<std::vector<int>>& v)
{
...
}