gpt4 book ai didi

c++ - 有没有办法交换 std::list 中的节点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:27 25 4
gpt4 key购买 nike

我正在实现 LRUCache,我在 unordered_map 中存储了一个要列出的迭代器。当我将最“新鲜”的元素移动到头部时,我需要迭代器不变。

我需要准确交换节点,而不是节点中的值。我正在寻找实现它的方法。

我尝试用 std::iter_swap 来实现,但它只是实现为 std::swap(*it_first, *it_second)

std::list<std::string> list;
list.emplace_back("first");
list.emplace_back("second");

auto it_first = list.begin();
auto it_second = ++list.begin();

std::iter_swap(it_first, it_second);

assert(list.begin() == it_second);

我需要交换两个节点以传递断言。

最佳答案

splice looks like it can do this像这样:

list.splice(it_first, list, it_second);

这表示“在我自己的第一个节点之前,在 it_second 中拼接我自己(list,第二个参数)”。该方法保证“移动元素的迭代器保持有效,但现在引用 *this,而不是其他。”,这意味着原始节点本身已被移动。

关于c++ - 有没有办法交换 std::list 中的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57523141/

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