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().