gpt4 book ai didi

c++ - 访问 std::list 上的最后一个节点

转载 作者:太空狗 更新时间:2023-10-29 21:20:58 27 4
gpt4 key购买 nike

我正在尝试编写遍历“pointNodes”列表的代码,并为每个节点打印当前、上一个和下一个节点的 x 变量——除了列表中的第一个和最后一个节点,分别使用最后一个节点而不是前一个节点和第一个节点而不是下一个节点。

这是打印列表的代码:

n = 1;
p = 1;
for (i = pointList.begin(); i != pointList.end(); ++i)
{

if (i == pointList.begin()) // for the first node, works fine
{
cout << "First node! x is " << i->getX() << ", next X var is " << next(point, n)->getX() << ", previous X is " << pointList.begin()->getX() << " (n is(" << n << "), p is(" << p << ")" << endl;
n = n + 1;
p = p - 1;
}
else if (i == pointList.end()) // problem bit
{
cout << "Last node! x is " << i->getX() << ", next X var is " << pointList.begin()->getX() << ", previous X is " << prev(point, p)->getX() << " (n is(" << n << "), p is(" << p << ")" << endl;
n = n + 1;
p = p - 1;
}
else // for everything inbetween, works fine.
{
cout << "x is " << i->getX() << ", next X var is " << next(point, n)->getX() << ", previous X is " << prev(point, p)->getX() << " (n is(" << n << "), p is(" << p << ")" << endl;
n = n + 1;
p = p - 1;
}



}

我意识到 list.end 实际上并不意味着列表中的最后一个节点。我仍然不确定如何为最后一个节点做一些不同的事情,所以我很感激任何帮助。我试过“if (pointList.back())”,但这给了我一个“没有运算符匹配这些操作数”的错误。

谢谢!

最佳答案

我认为您最简洁的解决方案会检查是否有两个以上的元素,然后简单地遍历 begin+1end-1 的范围:

// check size, otherwise increment/decrement might be invalid
if (list.size() < 2) return;

for(it = std::next(container.begin()), end = std::prev(container.end()); it!=end; ++it)
{
prev = std::prev(it);
next = std::next(it);
// output prev, it, next here
}

关于c++ - 访问 std::list 上的最后一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460338/

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