交换后矢量会保持连续吗?
will vectors stay contiguous after swapping?
交换两个元素后向量会保持连续吗?
PS:不管答案是什么,我们如何才能真正确定?如果可以的话。
交换两个元素只是将数据从一个元素复制到另一个元素,反之亦然,分配的内存保持不变,所以,是的,它保持连续。
How can we really be sure?
对于大多数人来说,标准的保证应该足够了。
[n3337, 23.6.6.1] The elements of a vector are stored contiguously, meaning that if v is
a vector where T is some type other than bool, then it
obeys the identity &v[n] == &v[0] + n for all 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
}
}
交换两个元素后向量会保持连续吗?
PS:不管答案是什么,我们如何才能真正确定?如果可以的话。
交换两个元素只是将数据从一个元素复制到另一个元素,反之亦然,分配的内存保持不变,所以,是的,它保持连续。
How can we really be sure?
对于大多数人来说,标准的保证应该足够了。
[n3337, 23.6.6.1] The elements of a vector are stored contiguously, meaning that if v is a vector where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 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
}
}