如何清除向量但保持其容量?

新手上路,请多包涵

我正在尝试修复一些大量使用向量的代码,并且有一些看起来像这样的循环:

 for (int t=0;t<T;t++){
    std::vector<double> vect;
    for (int i=0;i<MAX;i++){
        double value;
        vect.push_back(value);
    }
    /*....*/
}

我或多或少知道如何通过为外部迭代重用相同的向量来改进这一点,但是在这样做时我发现在调用 std::vector::clear “向量容量不能保证改变” 时,我实际上是希望容量能保证不变。也许我只是误解了 cplusplus.com 上写的内容。但是,我的问题是:

如何在不改变容量的情况下清除矢量?

我应该在 --- reserve clear 以确保容量相同吗?

PS: 为了清楚起见,我想将上面的代码重写为

std::vector<double> vect;
vect.reserve(MAX);
for (int t=0;t<T;t++){
    for (int i=0;i<MAX;i++){
        double value;
        vect.push_back(value);
    }
    /*....*/
    vect.clear();
}

IE。我仍然想通过 push_back 填充它,我担心 clear() 改变向量的容量。

原文由 463035818_is_not_a_number 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 313
1 个回答

cppreference 明确表示向量的容量不变。

来自 cppreference (粗体强调它是我自己的):

 void clear();

从容器中移除所有元素。使引用包含元素的任何引用、指针或迭代器无效。可能使任何过去的迭代器无效。

保持向量的容量()不变。

编辑

正如 Dmitry Kuznetsov 在评论中指出的那样,该 标准 没有提到容量:

表达式: a.clear()

返回类型: void

断言/注释前置/后置条件: 销毁 a 中的所有元素。使所有引用 a 元素的引用、指针和迭代器无效,并可能使过去的迭代器无效。

帖子: a.empty() 返回 true。

复杂性: 线性。

原文由 Alessandro Teruzzi 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题