gpt4 book ai didi

c++ - 获取对 std::list 中最后两个元素的引用

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

我需要 std::list 中最后两个元素的别名。最后一个很简单(.back()),但是我应该如何得到它之前的那个呢?

我的第一个想法是:在最后一个元素 (.end()) 之后获取一个迭代器,并将它向左移动两次。这是我“制作”的内容:

&last_but_one = *----myList.end(),

虽然它有效,但我个人觉得它有点模糊,如果我在别人的代码中看到它,我认为我不会轻易解析它1

通读this answer显示了一些其他(过于)冗长的方法2:

auto iter = n.end();
std::advance(iter, -2);
&last_but_one = *iter; // this is overkill!

// weird, and the .next() variant even more
&last_but_one = *std::prev(std::prev(n.end()));

&last_but_one = *++myList.rbegin(); // similar to *----myList.end()

执行此操作的首选方法是什么?

1我可以发表评论,但代码应该是不言自明的。
2 可能更慢更复杂,这不应该是选择的主要原因

最佳答案

std::prev()有两个参数。你可以使用第二个:

auto& second_to_last = *std::prev(list.end(), 2);

这与您使用 advance(iter, -2) 的版本完全相同,只是它返回结果迭代器而不是 void,因此您可以做任何您需要的事情在一条线上。

关于c++ - 获取对 std::list 中最后两个元素的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38445587/

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