将2D向量传递给函数

时间:2018-06-19 19:28:35

标签: c++ stl

如果我声明这样的向量,

vector <int> v[100];

如何将其传递给函数并在该函数中作为参数接收?

我尝试使用它,

void foo(vector <int>& v) {
..
}
main() {
..
foo(v);
}

2 个答案:

答案 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) 
{
   ...  
}