使用反向迭代器擦除列表元素
在C 中,std::list 容器中的擦除函數需要一個迭代器參數。不過,你可能會遇到需要使用反向迭代器(std::list::reverse_iterator)刪除元素的情況。
解決方案:
根據C 標準,反向迭代器i 與其基底迭代器之間存在以下關係i.base():
&*(reverse_iterator(i)) == &*(i - 1)
這表示反向迭代器指向緊接在其基底迭代器指向的元素之後的元素。
使用反向迭代器擦除元素,您需要應用偏移量來取得基底迭代器:
m_CursorStack.erase(--(i.base()));
此表達式有效地將基底迭代器減一,從而指向要擦除的元素。
其他解(C 11及更高版本):
m_CursorStack.erase(std::next(i).base());
std::advance(i, 1); m_CursorStack.erase(i.base());
這些解決方案比原來的方法更簡潔、更清晰。選擇最適合您要求的。
以上是如何使用反向迭代器從 C `std::list` 中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!