将2D向量连接到左侧

时间:2019-07-17 16:27:36

标签: c++ vector compiler-errors

左右分别是:

    Command "python setup.py egg_info" failed with error code 1

我希望我的leftRight向量为:

vector<vector<int>> left = {{10, 20}, {30, 40}}; 
vector<vector<int>> right = {{1, 2}, {3, 4}};

这是我尝试过的方法,但是不起作用:

vector<vector<int> leftRight = {{10, 20, 1, 2}, {30, 40, 3, 4}}

2 个答案:

答案 0 :(得分:3)

这些陈述中有错字

leftRight[i].insert(leftRight[i].end(); left[i].begin(), left[i].end());
                                     ^^^
leftRight[i].insert(leftRight[i].end(); right[i].begin(), right[i].end());
                                     ^^^

使用逗号代替分号。

并且您可能不能将下标运算符用于空向量。

所以你应该写

leftRight.resize(left.size());

代替

leftRight.reserve(left.size());

这是您的程序的更新

#include <iostream>
#include <vector>

using namespace std; 

int main() 
{ 
    vector<vector<int>> left = {{10, 20}, {30, 40}}; 
    vector<vector<int>> right = {{1, 2}, {3, 4}};
    vector<vector<int>> leftRight;

    leftRight.resize(left.size());
    for(int i = 0; i < left.size(); i++) { 
    leftRight[i].reserve(left[i].size() + right[i].size()); 
    leftRight[i].insert(leftRight[i].end(), left[i].begin(), left[i].end());
    leftRight[i].insert(leftRight[i].end(), right[i].begin(), right[i].end());
    }

    for ( const auto &v : leftRight )
    {
        for ( const auto &item : v ) std::cout << item << ' ';
        std::cout << '\n';
    }       

    return 0; 
}

其输出为

10 20 1 2 
30 40 3 4 

答案 1 :(得分:1)

leftRight.reserve(left.size());

这只会保留空间,但实际上不会创建元素。因此,访问任何leftRight[i]都将失败。

您想要

leftRight.resize(left.size());