可以移植来处理std :: vector之类的数组

时间:2013-11-01 13:45:51

标签: c++ arrays pointers vector

我看到我的团队成员正在编写这样的代码。我个人认为这不可移植,因为矢量可以以完全不同的方式实现。我是对的吗?

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

2 个答案:

答案 0 :(得分:21)

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

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

  

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

答案 1 :(得分:8)

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

相关问题