gpt4 book ai didi

c++ - 我如何检查这是否是 std::list 的最后一个成员?

转载 作者:行者123 更新时间:2023-11-30 00:38:14 27 4
gpt4 key购买 nike

我有如下列表

typedef std::list<std::string> SegmentValue;

然后在迭代中我需要检查这是否是最后一次迭代。

     for(Field::SegmentValue::const_iterator it = m_segmentValue.begin();It != 
m_segmentValue.end();It++){
if((segIt + 1) == m_segmentValue.end())//last iteration
...
}

但我在编译时遇到错误:

 error C2678: binary '+' : no operator found which takes a left-hand operand of type 'std::list<_Ty>::_Const_iterator<_Secure_validation>'

我如何检查这是否是最后一次迭代?

最佳答案

您不能将二进制 +- 运算符与 std::list 迭代器一起使用。 std::list 迭代器是双向 迭代器,但它们不是随机访问 迭代器,这意味着您不能将它们移动任意常数值(value)。

使用一元 ++-- 代替

Field::SegmentValue::const_iterator it_last = m_segmentValue.end();
--it_last;

现在 it_last 是最后一个元素迭代器。只要确保它仍然有效即可。如果您没有对容器进行任何使迭代器无效的修改,则可以预先计算 it_last 并在循环中使用它。否则,您必须根据需要重新计算它。

事实上,在通用算法中,尽可能使用 --++ 迭代器总是一个好主意(而不是二进制 + 1 - 1),因为它降低了算法的要求:二进制 +- 需要随机访问 迭代器,而 ++-- 使用双向

关于c++ - 我如何检查这是否是 std::list 的最后一个成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11397598/

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