gpt4 book ai didi

c++ - 有没有办法从 std::list 中提取一个节点,类似于 std::map::extract 的作用?

转载 作者:行者123 更新时间:2023-12-01 14:20:20 25 4
gpt4 key购买 nike

对于我的任务,我正在使用 std::list<Key>维护临时 LRU 缓存中元素的顺序。因此,频繁的操作之一是取出列表元素并将其放回列表的前面。

显然可以先使用std::list::erase来实现然后 std::list::push_front .但是,当我想做的只是将列表节点移动到不同位置时,我不喜欢处理内存重新分配的想法。

这正是extract方法允许我们为 std::map 做, std::set等等:取出一个节点,修改它并把它放回去,根本没有重新分配。

有没有合理的解释为什么std::list缺乏相同的功能,是否有一种解决方法可以用现有的类 API 来模仿它?

最佳答案

有一个 std::list::splice 可能是您想要的成员函数。它对列表节点的内部指针进行操作。我没有看到从/向同一个列表拼接的方法,但您可以拼接到临时(空)std::list然后拼接回原列表的前面。

审核时,同一列表内允许拼接。将整个列表拼接到自身是未定义的。可以将单个元素拼接到同一个列表中,拼接一系列元素也可以,只要目标位置不包含在拼接源范围内即可。 (谢谢你,丹尼尔朗格)

关于c++ - 有没有办法从 std::list 中提取一个节点,类似于 std::map::extract 的作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61405556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com