【问题标题】:will vectors stay contiguous after swapping? [duplicate]交换后向量会保持连续吗? [复制]
【发布时间】:2016-07-19 17:42:21
【问题描述】:

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

PS:不管答案是什么,我们如何才能真正确定?如果可能的话。

【问题讨论】:

  • 您的意思是“连续”? std::vector 被设计用来保存连续的元素,怎么会不呢?

标签: c++ c++11 vector swap contiguous


【解决方案1】:

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

【讨论】:

  • 但是如果您知道可能的内存框架,您应该编写自己的内存分配器link
  • 交换两个向量元素怎么可能导致碎片?
  • 我不是在说交换两个向量会产生内存框架,我是在说我关心你程序的内存创建自己的内存池很有趣
  • 是的,但这与问题(和答案)同样重要,因为如果你想要甜茶,你可以在里面放糖。
【解决方案2】:

我们如何才能真正确定?

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

[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
   }
}

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多