Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将2D向量的一行连接到C+中的另一行+;_C++_Multidimensional Array_Vector_Concatenation_Stdvector - Fatal编程技术网

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]
可能是垃圾。@cdhowie
insert
不应在此处执行多次重新分配,因为它预先知道需要添加多少元素。@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();