如何使用std::reverse_iterator擦除*AND CONTINUE* ?
How do you erase *AND CONTINUE* using a std::reverse_iterator?
我一直在研究stackoverflow,甚至是Dobbs博士那篇非常非常好的文章,但我找不到这个问题的明确答案。
std::reverse_iterator的缺点是什么?表示可能根本不可能。
std::list::reverse_iterator it = list.rbegin();
while( it != list.rend() )
{
int value=*it;
if( some_cond_met_on(value) )
{
++it;
list.erase( it.base() );
}
else
{
++it;
}
}
PS:我知道还有其他的选择,比如erase_if(),但我正在寻找这个特定问题的答案。
应该是
std::list<int>::reverse_iterator it = list.rbegin();
while( it != list.rend() )
{
int value=*it;
if( some_cond_met_on(value) )
{
++it;
it= reverse_iterator(list.erase(it.base()); // change to this!
}
else
{
++it;
}
}
我见过的大多数erase()
实现在这种情况下返回序列中的下一个迭代器,例如:
std::list<int>::reverse_iterator it = list.rbegin();
while( it != list.rend() )
{
int value = *it;
if( some_cond_met_on(value) )
{
it = list.erase( it );
}
else
{
++it;
}
}
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- 如何在Visual Studio 2019中使用cmake项目进行"Edit and Continue"构建?
- 如何使用std::reverse_iterator擦除*AND CONTINUE* ?
- Hotswapping / Edit and continue for C/C++, Linux