2016-04-24 34 views
-2

我想推5x4的矩阵 [11110,11010 , 11000, 0000]成如何插入矩阵到载体<vector<char>>

vector<vector<char>> myvec; 

myvec会[0] .push_back( '1')将向量下标超出范围错误。

+1

只能使用'[]'对于已存在的行 –

+0

“插入”是什么意思?你想只是将这个矩阵5x4存储在'myvec'中,或者以某种方式移动现有的数据以将矩阵存储在那里? – Victor

+0

我只想将矩阵5x4存储在myvec中 – kotlavaibhav

回答

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'); 

顺便说一句,矢量的矢量通常是用于存储的矩形矩阵次优的选择。它浪费空间,并不能保证矩阵保持矩形(每行可以是不同的宽度)。但是如果你对性能不太在乎,或者你的矩阵很小,我想这不是什么大问题。

+0

'reserve'循环是多余的 –

+2

@ M.M:你的意思是什么? –

+1

没有它,代码工作正常,“使push_back更快”似乎不太可能,只是在分配时发生了变化,但仍然存在分配。我的主要观点是,OP可能已经阅读你的答案,并认为这是一个必要的步骤 –

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 ... 
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'} 
    };