使用反向迭代器從清單中刪除元素
可能會遇到這樣的情況:您希望從清單中刪除元素list使用反向迭代器,但擦除()函數只接受常規迭代器。這可能會帶來挑戰,因為將反向迭代器轉換為常規迭代器並不簡單。
解:
解決此問題的關鍵在於理解其中的關係反向迭代器與其基底迭代器之間。根據 C 標準,反向迭代器 i 的基底迭代器是 &*(i - 1)。這意味著要取得基本迭代器,我們遞減 i。
範例:
考慮以下程式碼片段:
for ( std::list< Cursor::Enum & >::reverse_iterator i = m_CursorStack.rbegin(); i != m_CursorStack.rend(); ++i ) { if ( *i == pCursor ) { m_CursorStack.erase( --(i.base()) ); break; } }
在此例如,基底迭代器是透過遞減i.base() 取得的。透過將此基本迭代器傳遞給擦除()函數,我們可以成功地從清單中刪除所需的元素。
C 11 解:
對於 C 11及更高版本,還有兩個額外的解決方案可用:
m_CursorStack.erase( std::next(i).base() );
這個解保持不變,而std::next()用於將反向迭代器向前推進一個位置,有效地檢索其基礎迭代器.
std::advance(i, 1); m_CursorStack.erase( i.base() );
在此解決方案中,反向迭代器使用std::advance() 前進一個位置,這有效地將其基本迭代器與所需的元素對齊以進行擦除。
無論您選擇哪種解決方案,這些方法都提供了使用反向迭代器從清單中刪除元素的乾淨且直接的方法。
以上是如何使用 C 中的反向迭代器從清單中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!