使用operator []直接设置std :: vector内容

Ste*_* Lu 3 c++ stl std

我注意到,如果我做vec[0] = 1了一个新的空std::vector<int>,vec.size()遗骸0.

但是我仍然vec[0]可以检索我的1.

这是否属于未定义的行为?这里发生了什么?这只是写入1保留的内存空间,我应该期待这会在我脸上爆炸,对吧?

Kar*_*k T 8

这确实是未定义的行为

[] 不检查边界,也不添加元素.你正在做的是写入和读取使用的缓冲区vector,但这被认为是未定义的行为.


您应该使用这些方法之一添加到矢量.

.push_back(0) 默认方法 - 追加到最后

.resize(num,0)调整vector向上(或向下)num的大小,并将新元素的值设置为第二个arg,0.

vector也可以与初始尺寸构造- vector(num,0)是或多或少相同v = vector();v.resize(num,0)


另一方面,为了安全地执行此操作,您可以使用.at(n)访问元素,如果超出边界,这将抛出std :: out_of_range异常.