是否可以像数组一样处理 std::vector

is it portable to treat std::vector like array

本文关键字:一样 处理 std vector 数组 是否      更新时间:2023-10-16

我见过我的团队中有人写这样的代码。我个人认为这是不可移植的,因为矢量可以以完全不同的方式实现。我说的对吗?

vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
int* b = &a[0];
std::cout<< *(b +1); // this will print 2

该代码是正确的。存储在std::vector中的元素保证从 C++03 开始连续存储。

这是当前标准草案N3797(23.3.6.1)C++的相关部分:

向量是支持随机访问的序列容器 迭代器。此外,它还支持(摊销)恒定时间插入 并在最后擦除操作;在中间插入和擦除 线性时间。存储管理是自动处理的,但提示 可以给予以提高效率。向量的元素是 连续存储,这意味着如果 v 是一个向量,其中 T 是一些 除 bool 以外的类型,则服从恒等&v[n] == &v[0] + n 对于所有0 <= n < v.size().

无论向

量以何种方式实现,标准都保证某些事情保持一致。std::vector始终连续存储在内存中,这就是为什么它可以与随机访问迭代器一起使用的原因。