【问题标题】:concatenate 2D vector to the left将二维向量连接到左侧
【发布时间】:2019-07-17 16:27:36
【问题描述】:

当左右为:

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

我希望我的 leftRight 向量是:

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

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

#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.reserve(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());
    }
    return 0; 
}

【问题讨论】:

  • 在什么情况下不起作用?
  • 它在什么方面不起作用?请注意,对于StackOverflow 的一个有用问题,解释这一点很重要。请记住,问题的主要目的是帮助未来的读者理解和解决相同的问题。当实际问题不清楚时,它不可能帮助任何人。

标签: c++ vector compiler-errors


【解决方案1】:

这些语句中有错别字

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 

【讨论】:

    【解决方案2】:
    leftRight.reserve(left.size());
    

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

    你想要的

    leftRight.resize(left.size());
    

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 2020-11-09
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      相关资源
      最近更新 更多