交换后,矢量会保持连续吗?

Jos*_*eph 1 c++ swap vector contiguous c++11

交换两个元素后,向量是否会保持连续状态?

PS:无论答案是什么,我们怎么能确定?如果那是可能的.

bas*_*hrc 6

我们怎么能真正确定?

对于大多数人来说,标准的保证应该足够了.

[n3337,23.6.6.1]向量的元素是连续存储的,这意味着如果v是一个向量,其中T是除bool之外的某种类型,那么它服从标识&v [n] ==&v [0] + n全部0 <= n <v.size().

你可以用一种黑客的方式做到这一点.

template<typename T>
void PrintVectorElements(vector<T> C){
   auto startPtr = C.data();
   for (auto x = C.begin(); x != C.end(); ++startPtr, ++x){
        assert(*startPtr == *x);
        assert(&(*x) == startPtr); // take this line with a pinch of salt
   }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

交换两个元素只是将数据从一个复制到另一个,反之,分配的内存保持不变,所以,是的,它仍然是连续的.

  • 如何交换两个向量元素可能导致碎片? (3认同)