首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环通过std::deque并删除条目

循环通过std::deque并删除条目
EN

Stack Overflow用户
提问于 2021-01-29 04:43:10
回答 2查看 86关注 0票数 0

我正在尝试遍历std::deque并删除它的所有内容。我可以一路上这样做:

代码语言:javascript
运行
复制
for(auto & x: myDeque)
{
    // do something
    myDeque.pop_front();
}

或者我可以在循环结束后执行myDeque.clear()。我想知道我应该用哪种方式?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-29 04:46:44

几乎可以肯定的是,首先执行循环来处理数据,然后单独执行myDeque.clear();来清空它。

从纯理论的角度来看,无论哪种方式都是O(n),但从实际的角度来看,clear几乎总是至少一样快,而且通常更快。可能的例外是,如果您正在处理的deque太大,以至于无法放入缓存中。在这种情况下,一次对特定数据段执行所需的所有操作(包括删除)可以避免将该数据重新加载到缓存中两次:一次用于处理,另一次用于销毁。

特别是,deque通常实现为两级结构:非常类似于指向块的指针的vector,其中每个块包含固定数量的数据项。当您执行pop_front时,它必须查看第一个块,确定此pop_front是否清空了第一个块。如果有,它会删除该块。如果不是,它只会更新一个索引,告诉它当前块中的哪个位置是前面。

但当你使用clear时,它只会遍历数据,并销毁所有内容。

票数 2
EN

Stack Overflow用户

发布于 2021-01-29 04:45:46

myDeque.clear()将更容易,因为它将销毁自身上的所有节点。使用他们提供的功能,因为在大多数情况下,它可以更有效地完成任务,并减轻您的负担。

它的另一个好处是,其他阅读您的代码的人将更容易理解正在发生的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65944941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档