C++ 变换向量<;向量<;点>&燃气轮机;向量中的x<;点>;Y

C++ 变换向量<;向量<;点>&燃气轮机;向量中的x<;点>;Y,c++,vector,C++,Vector,我有一个向量X,我想将其中的所有元素复制到向量Y(如果可能的话,按相同的顺序) 我尝试了(在for循环中): 但很明显,它不起作用 我也发现了这个(在stackoverflow上),但它对我来说并不适用 for (std::vector<std::vector<Point> >::iterator it = X.begin(), itEnd = X.end(); it != itEnd; ++it) Y.push_back((*it)); for(std::ve

我有一个
向量>X
,我想将其中的所有元素复制到
向量Y
(如果可能的话,按相同的顺序) 我尝试了(在for循环中):

但很明显,它不起作用

我也发现了这个(在stackoverflow上),但它对我来说并不适用

for (std::vector<std::vector<Point> >::iterator it = X.begin(), itEnd = X.end(); it != itEnd; ++it)
    Y.push_back((*it));
for(std::vector::iterator it=X.begin(),itEnd=X.end();it!=itEnd;++it)
推回((*it));
但是编译器告诉我“重载中没有函数的实例”(老实说,我甚至不知道这是什么意思)

这将从向量
i
中获取元素
i
。如果要复制所有图元,请执行以下操作:

 vector<vector<Point> > X;
 vector<Point> Y;
 //....
 for ( int i = 0 ; i < X.size() ; i++ )
    for ( int j = 0 ; j < X[i].size() ; j++ )
       Y.push_back(X[i][j]);
向量X;
向量Y;
//....
对于(int i=0;i
编辑:根据评论和另一个答案,在这个问题中也可以找到更像C++的方法——

for(vector::iterator it=X.begin();it!=X.end();++it)
Y.insert(Y.end(),it->begin(),it->end());

如果知道结果向量的大小,可以在循环之前调用
Y.reserve(finalYSize)

我建议使用
insert
而不是内部for循环。这是正确的。只是一些额外的阅读资料,真的非常感谢!:)此外,此方法也非常有效:)对于不使用c++11的用户,请在
>
之间添加一个空格。i、 e:
for(vector::迭代器it=X.begin();it!=X.end();++it)
谢谢,忘了它了。。。C++11ftw!我们这里还有一个问题:为什么(我认为)做.reserve并给向量一个大小是很重要的?如果我不做的话,区别是什么?(在特定情况下,我不会这样做,因为我不知道结果向量的确切大小)。在C++11中,显然应该为(auto&subvct:X)Y.insert(Y.end(),subvct.begin(),subvct.end())使用基于循环
的可读性更高的范围,这是完全等效的。
 Y.push_back(i) = X.at(i).at(i);
 vector<vector<Point> > X;
 vector<Point> Y;
 //....
 for ( int i = 0 ; i < X.size() ; i++ )
    for ( int j = 0 ; j < X[i].size() ; j++ )
       Y.push_back(X[i][j]);
for(vector<vector<Point> >::iterator it = X.begin(); it != X.end(); ++it)
     Y.insert(Y.end(), it->begin(), it->end());