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

KKK*_*oo0 12 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
Run Code Online (Sandbox Code Playgroud)

mfo*_*ini 21

那段代码是对的.存储在a std::vector中的元素保证在C++ 03中连续存储.

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

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


Kun*_*nal 8

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