我注意到,如果我做vec[0] = 1了一个新的空std::vector<int>,vec.size()遗骸0.
但是我仍然vec[0]可以检索我的1.
这是否属于未定义的行为?这里发生了什么?这只是写入1保留的内存空间,我应该期待这会在我脸上爆炸,对吧?
这确实是未定义的行为
[] 不检查边界,也不添加元素.你正在做的是写入和读取使用的缓冲区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异常.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |