有没有类似于std::map::extract那样从std::list中提取节点的方法?

在我的任务中,我使用了 std::list<Key> 来维持一个临时的LRU缓存中元素的顺序。所以,其中一个频繁的操作就是把一个列表元素取出来,然后放回列表的前面。

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

这正是 extract 方法允许我们为 std::map, std::set 等:把一个节点拿出来,修改后再放回去,完全没有重新分配。

有没有一个合理的解释,为什么 std::list 缺少同样的功能,有什么变通的办法可以用现有的类API来模仿它吗?

解决方案:

有一个 std::list::splice 成员函数,这可能是你想要的。它在列表节点的内部指针上操作。我看不到有什么方法可以将from到同一个列表中,但可以用 你可以把它拼接到一个临时(空)的。std::list 然后再拼接回原列表的前面。

在审查时,允许在同一列表内进行拼接。将整个列表拼接到自己身上是没有定义的。将单个元素拼接到同一个列表中是可以的,而将元素的范围拼接也是可以的,只要目标位置不包括在拼接的范围内。(谢谢你,Daniel Langr)

给TA打赏
共{{data.count}}人
人已打赏
未分类

我可以简化这些JavaScript三元运算符吗?`variableA ? variableB : false`改为`variableA && variableB`。

2022-9-8 23:17:41

未分类

春天数据Neo4j APOC不执行但不出错

2022-9-8 23:28:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索