C++ 将2D向量的一行连接到C+中的另一行+;
我有一个二维向量,如下所示-C++ 将2D向量的一行连接到C+中的另一行+;,c++,multidimensional-array,vector,concatenation,stdvector,C++,Multidimensional Array,Vector,Concatenation,Stdvector,我有一个二维向量,如下所示- vector <vector<int> > v; v.push_back({1, 2, 3}); v.push_back({4, 5}); v.push_back({6, 7, 8}); /* row 0 - 1 2 3 row 1 - 4 5 row 2 - 6 7 8 */ 这是我的算法,效率不高- 1) create a temporary 1D vector 't'. 2) push_back all the elements
vector <vector<int> > v;
v.push_back({1, 2, 3});
v.push_back({4, 5});
v.push_back({6, 7, 8});
/*
row 0 - 1 2 3
row 1 - 4 5
row 2 - 6 7 8
*/
这是我的算法,效率不高-
1) create a temporary 1D vector 't'.
2) push_back all the elements of row 2 into 't'.
3) erase row 1 using v.erase(v.begin()+1);
4) insert 't' at the end of row 0 - v[0].insert(v[0].end(), t.begin(), t.end()).
是否有一种有效的方法来执行此操作?类似的操作,可能是:
v[0].insert(v[0].end(), v[1].begin(), v[1].end());
v[1].swap(v[2]);
v.pop_back();
我建议在顶部添加:
v[0].reserve(v[0].size()+v[1].size())代码>因为这将防止在插入过程中多次重新分配。首先保留最多可确保一次重新分配。move
也比swap
好,因为v[2]
可能是垃圾。@cdhowieinsert
不应在此处执行多次重新分配,因为它预先知道需要添加多少元素。@cigien问题陈述特别要求将v[2]
的内容传输到v[1]
。对,但不需要将v[1]
的内容传输到v[2]
。那是浪费的工作。
v[0].insert(v[0].end(), v[1].begin(), v[1].end());
v[1].swap(v[2]);
v.pop_back();