1

交换两个元素后向量会保持连续吗?

PS:不管答案是什么,我们怎么能确定呢?如果可能的话。

4

2 回答 2

6

我们如何才能真正确定?

对于大多数人来说,标准的保证就足够了。

[n3337, 23.6.6.1] 向量的元素是连续存储的,这意味着如果 v 是一个向量,其中 T 是 bool 以外的某种类型,那么它遵循恒等式 &v[n] == &v[0] + n所有 0 <= n < v.size()。

你可以用一种 hacky 的方式做到这一点。

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
   }
}
于 2016-03-31T10:33:48.947 回答
5

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

于 2016-03-31T10:21:41.053 回答