【发布时间】:2016-07-19 17:42:21
【问题描述】:
交换两个元素后向量会保持连续吗?
PS:不管答案是什么,我们如何才能真正确定?如果可能的话。
【问题讨论】:
-
您的意思是“连续”?
std::vector被设计用来保存连续的元素,怎么会不呢?
标签: c++ c++11 vector swap contiguous
交换两个元素后向量会保持连续吗?
PS:不管答案是什么,我们如何才能真正确定?如果可能的话。
【问题讨论】:
std::vector 被设计用来保存连续的元素,怎么会不呢?
标签: c++ c++11 vector swap contiguous
交换两个元素只是将数据从一个复制到另一个,反之亦然,分配的内存保持不变,所以,是的,它保持连续。
【讨论】:
我们如何才能真正确定?
对于大多数人来说,标准的保证就足够了。
[n3337, 23.6.6.1] 向量的元素是连续存储的,这意味着如果 v 是 一个向量,其中 T 是 bool 以外的某种类型,那么它 对所有 0
您可以通过一种 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
}
}
【讨论】: