【问题标题】:Concatenate one row of a 2D vector into another row in C++将二维向量的一行连接到 C++ 中的另一行
【发布时间】:2020-11-09 01:26:14
【问题描述】:

我有一个如下的二维向量-

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 
*/

我想用尽可能少的操作将第 0 行末尾的第 1 行连接起来,这样最终的 2D 向量就变成了这个 -

/*
row 0 - 1 2 3 4 5
row 1 - 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()).

有没有一种有效的方法来执行这个操作?

【问题讨论】:

    标签: c++ multidimensional-array vector concatenation stdvector


    【解决方案1】:

    可能是这样的:

    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());,因为这将防止插入期间的多次重新分配。先保留可确保最多一次重新分配。
    • 另外,moveswap 更好,因为v[2] 可能是垃圾。
    • @cdhowie insert 不应该在这里执行多次重新分配,因为它预先知道需要添加多少元素。
    • @cigien 问题陈述中专门要求将v[2]的内容转移到v[1]
    • 对,但是你不需要将v[1]的内容转移到v[2]。那是浪费工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多