mor*_*lir 13 c++ iterator list
我试图在循环中访问先前迭代的元素,遍历列表的所有元素.
更具体地说,我的循环看起来像这样:
for (iter=list_object.begin(); iter!= list_object_.end(); iter++)
{
function_1(*iter);
function_2(*PREVIOUS_VALUE_IN_THE_LIST);
}
Run Code Online (Sandbox Code Playgroud)
如何在列表中访问此前一个值?
Jam*_*lis 18
std::list只是双向可互换,因此您一次只能将迭代器移动一个位置.因此,您需要创建一个新的迭代器:
iter_copy = iter;
--iter;
Run Code Online (Sandbox Code Playgroud)
显然,在减少迭代器之前,您有责任确保前一个元素实际存在.
在C++ 0x中,此功能整齐地包含在std::prev您的C++标准库实现可能支持的函数中.如果没有,它看起来像这样:
template <typename BidiIt>
BidiIt prev(BidiIt x, typename std::iterator_traits<BidiIt>::difference_type n=1)
{
std::advance(x, -n);
return x;
}
Run Code Online (Sandbox Code Playgroud)
edA*_*a-y 17
一种简单的方法是简单地跟踪for循环中的前一个元素,例如:
for( list_t::iterator iter=obj.begin(), prev=obj.end();
iter != obj.end(); prev=iter, ++iter )
{
function_1(*iter);
if( prev != obj.end() )
function_2(*prev)
}
Run Code Online (Sandbox Code Playgroud)
这将适用于简单转发的迭代器,它们不需要是双向的.