当我尝试执行以下操作时,我有一个11663 Bus Error
;
std::vector< std::vector<int> > bullets;
std::vector<int> num;
num[0] = 7;
bullets.push_back(num);
我认为这会起作用,因为向量bullets
的类型是向量。为什么这不能按预期工作?此外,以下工作;
std::vector< std::vector<int> > bullets;
std::vector<int> num (4, 100);
bullets.push_back(num);
我不知道为什么会这样,但不是我的其他代码。
答案 0 :(得分:4)
std::vector<int> num;
num[0] = 7;
num
尚未为任何事物分配存储空间。如果您知道该索引中存在元素,则仅使用索引语法[]
。否则,请使用push_back
,如果需要,可以增加vector
的存储容量。第二个例子是有效的,因为你使用的构造函数为元素保留了一定的空间(在这种情况下为4,全部值为100)。
std::vector<int> num;
num.push_back(7);
bullets.push_back(num);
另一方面,“这不起作用”不是一个非常有用的问题描述。另外,请注意,如果需要迭代每个元素,用作矩阵的向量向量在性能关键代码中不是一个好主意。
不要废弃它,不要担心它,除非你知道这是一个问题的事实,但是要意识到你用这种方法丢失了数据的局部性vector将分别分配其存储空间。如果在紧密循环中迭代此数据,最好分配一个大向量并手动计算每个位置的偏移量。
答案 1 :(得分:0)
num[0] = 7;
应该是
num.push_back(7);