2

11663 Bus Error当我尝试执行以下操作时,我有一个;

std::vector< std::vector<int> > bullets;
std::vector<int> num;
num[0] = 7;
bullets.push_back(num);

我认为这会起作用,因为 vectorbullets的类型是向量。为什么这不能按预期工作?此外,以下作品;

std::vector< std::vector<int> > bullets;
std::vector<int> num (4, 100);
bullets.push_back(num);

而且我不知道为什么会这样,但我的其他代码不知道。

4

2 回答 2

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

附带说明一下,“这不起作用”不是一个很有帮助的问题描述。另外,请注意,如果您需要遍历每个元素,在性能关键代码中用作矩阵的向量向量不是一个好主意。

暂时不要废弃它,也不要担心它,除非您知道这将是一个问题,但要意识到使用这种方法会丢失数据的局部性,因为每个向量都会单独分配其存储空间。如果这些数据在一个紧密的循环中被迭代,你最好分配一个大向量并手动计算每个单独位置的偏移量。

于 2012-10-16T17:04:39.087 回答
0
num[0] = 7;

应该

num.push_back(7);
于 2012-10-16T17:05:15.120 回答