c ++,创建向量的向量?

时间:2011-12-28 19:25:22

标签: c++ stl

问题是创建vector vector的最佳方法是什么?我有几个vector<double> coordinates;,我希望将它们传递给函数。我应该如何组合它们vector<vector<double> >?有更优雅的方式吗?

4 个答案:

答案 0 :(得分:3)

这听起来像是一种合理的方法。如果您担心可读性,请使用typedef

但是,如果你的所有矢量都是相同的长度(例如,你真的想创建一个2D数组),那么考虑使用boost::multi_array

答案 1 :(得分:1)

就像你说的看起来很好:

void foo(vector<vector<double> > &);

int main()
{ 
    vector<double> coordinates1, coordinates2, coordinates3;
    //...

    vector<vector<double> > CoordinateVectors;
    CoordinateVectors.push_back(coordinates1);
    CoordinateVectors.push_back(coordinates2);
    CoordinateVectors.push_back(coordinates3);

    foo(CoordinateVectors);

    return 0;
}

答案 2 :(得分:1)

也许是这样的:

typedef vector<double> coords_vec_type;
typedef vector<coords_vec_type> coords_vec2_type;

void foo(coords_vec2_type& param) {
}

或指针,以避免在源向量已经在某个地方时进行复制:

typedef vector<coords_vec_type*> coords_vec2_ptr_type;

答案 3 :(得分:0)

另一个选择是将向量放入数组并将其传递给函数,例如:

void foo(std::vector<double> **vecs, int numVecs)
{
   ...
}

int main() 
{  
    std::vector<double> coordinates1, coordinates2, coordinates3; 
    //... 

    std::vector<double>* CoordinateVectors[3]; 
    CoordinateVectors[0] = &coordinates1; 
    CoordinateVectors[1] = &coordinates2; 
    CoordinateVectors[2] = &coordinates3; 

    foo(CoordinateVectors, 3); 

    return 0; 
} 

或者:

void foo(std::vector<double> *vecs, int numVecs)
{
   ...
}

int main() 
{  
    std::vector<double> coordinates[3]; 
    //... 

    foo(coordinates, 3); 

    return 0; 
}