我有些困惑于std::remove算法的使用差异。具体来说,我不明白使用这个算法时到底移除了什么。我编写了一个类似下面这样的小测试代码:
std::vector<int> a;
a.push_back(1);
a.push_back(2);
std::remove(a.begin(), a.end(), 1);
int s = a.size();
std::vector<int>::iterator iter = a.begin();
std::vector<int>::iterator endIter = a.end();
std::cout<<"Using iter...\n";
for(; iter != endIter; ++iter)
{
std::cout<<*iter<<"\n";
}
std::cout<<"Using size...\n";
for(int i = 0; i < a.size(); ++i)
{
std::cout<<a[i]<<"\n";
}
两种情况下的输出都是2,2。
然而,如果我使用像这样的remove和erase:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
我得到的输出为2。
所以我的问题是:
(1). 除了与erase函数一起使用外,是否有其他用途可以使用std::remove?
(2). 即使执行了std::remove,为什么a.size()返回2而不是1?
我在Scott Meyer的Effective STL书中读到了关于erase-remove惯用语的内容。但我仍然对此感到困惑。