如何将矩阵插入向量<vector <char>&gt;

时间:2016-04-24 02:09:28

标签: c++ c++11 matrix

我想推送5x4矩阵 [11110, 11010, 11000, 0000]进入

vector<vector<char>> myvec;

myvec [0] .push_back(&#39; 1&#39;)抛出矢量下标超出范围错误。

3 个答案:

答案 0 :(得分:1)

您创建了一个空向量,然后尝试使用[0]访问不存在的元素。

您可以做的一件事就是按照您需要的尺寸创建矢量:

// 4 vector elements (rows) each containing a vector of 5 char elements
std::vector<std::vector<char>> v(4, std::vector<char>(5)); 

然后您不需要使用push_back()添加元素,它们可以随时使用:

v[0][0] = '1';
v[0][1] = '1';
v[0][2] = '1';
v[0][3] = '1';
v[0][4] = '0';


v[1][0] = '1';
v[1][1] = '1';
v[1][2] = '0';
v[1][3] = '1';
v[1][4] = '0';

// ... etc ...

答案 1 :(得分:0)

您正在使用矢量矢量,并且您忘记首先在外部矢量中插入新的“行”。例如,您可以这样做:

myvec.resize(4); // create 4 rows now
for (auto& row : myvec) {
    row.reserve(5); // make space for 5 columns (makes push_back faster).
}
myvec[0].push_back('1');

另外,矢量矢量通常是存储矩形矩阵的次优选择。它浪费了空间,并不能保证矩阵完全保持矩形(每行可以是不同的宽度)。但如果你不太关心性能,或者你的矩阵很小,我认为这不是什么大问题。

答案 2 :(得分:0)

您可以在一个步骤中创建和初始化矢量矢量:

std::vector<std::vector<char>> myvec{
    {'1','1','1','1','0'}, 
    {'1','1','0','1','0'}, 
    {'1','1','0','0','0'}, 
    {'0','0','0','0','0'}
    };