多维矢量总线错误

Multidimensional vector bus error

本文关键字:总线 错误      更新时间:2023-10-16

当我尝试执行以下操作时,我有一个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);

我不知道为什么这是有效的,但我的其他代码不是。

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

附带说明一下,"这不起作用"并不是一个很有用的问题描述。此外,请注意,如果需要对每个元素进行迭代,那么在性能关键型代码中,将向量中的向量用作矩阵不是一个好主意。

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

num[0] = 7;

应该是

num.push_back(7);