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