gpt4 book ai didi

c++ - 如何使用反向迭代器调用删除

转载 作者:IT老高 更新时间:2023-10-28 11:30:42 26 4
gpt4 key购买 nike

我正在尝试做这样的事情:

for ( std::list< Cursor::Enum >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i )
{
if ( *i == pCursor )
{
m_CursorStack.erase( i );
break;
}
}

然而,erase 需要一个迭代器,而不是一个反向迭代器。有没有办法将反向迭代器转换为常规迭代器或另一种从列表中删除此元素的方法?

最佳答案

经过更多研究和测试,我找到了解决方案。显然根据标准 [24.4.1/1] i.base() 和 i 之间的关系是:

&*(reverse_iterator(i)) == &*(i - 1)

(来自 Dr. Dobbs article):

alt text

所以你需要在获取 base() 时应用一个偏移量。因此解决方案是:

m_CursorStack.erase( --(i.base()) );

编辑

为 C++11 更新。

reverse_iterator i 不变:

m_CursorStack.erase( std::next(i).base() );

reverse_iterator i 是高级的:

std::advance(i, 1);
m_CursorStack.erase( i.base() );

我发现这比我之前的解决方案要清晰得多。使用任何你需要的。

关于c++ - 如何使用反向迭代器调用删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1830158/

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