我想推5x4的矩阵 [11110,11010 , 11000, 0000]成如何插入矩阵到载体<vector<char>>
vector<vector<char>> myvec;
myvec会[0] .push_back( '1')将向量下标超出范围错误。
我想推5x4的矩阵 [11110,11010 , 11000, 0000]成如何插入矩阵到载体<vector<char>>
vector<vector<char>> myvec;
myvec会[0] .push_back( '1')将向量下标超出范围错误。
您正在使用一个载体向量,并且您已经忘记了先将一个新的“行”插入到外部向量中。例如,你可能做到这一点:
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');
顺便说一句,矢量的矢量通常是用于存储的矩形矩阵次优的选择。它浪费空间,并不能保证矩阵保持矩形(每行可以是不同的宽度)。但是如果你对性能不太在乎,或者你的矩阵很小,我想这不是什么大问题。
'reserve'循环是多余的 –
@ M.M:你的意思是什么? –
没有它,代码工作正常,“使push_back更快”似乎不太可能,只是在分配时发生了变化,但仍然存在分配。我的主要观点是,OP可能已经阅读你的答案,并认为这是一个必要的步骤 –
您创建了一个空向量,然后尝试访问[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 ...
可以创建和初始化向量的向量在一个步骤:
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'}
};
只能使用'[]'对于已存在的行 –
“插入”是什么意思?你想只是将这个矩阵5x4存储在'myvec'中,或者以某种方式移动现有的数据以将矩阵存储在那里? – Victor
我只想将矩阵5x4存储在myvec中 – kotlavaibhav