我想推送5x4矩阵 [11110, 11010, 11000, 0000]进入
vector<vector<char>> myvec;
myvec [0] .push_back(&#39; 1&#39;)抛出矢量下标超出范围错误。
答案 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'}
};