【发布时间】:2010-10-22 09:48:29
【问题描述】:
我对 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。
但是,如果我将擦除与删除一起使用,则如下所示:
a.erase(std::remove(a.begin(), a.end(), 1), a.end());
我得到的输出为 2。
所以我的问题是:
(1)。 std::remove 除了与擦除功能一起使用外,还有其他用途吗?
(2)。即使在执行 std::remove 之后,为什么 a.size() 返回 2 而不是 1?
我在 Scott Meyer 的 Effective STL 书中阅读了有关擦除删除习语的内容。但我仍然有这种困惑。
【问题讨论】:
-
我发现这方面最难的部分是擦除和删除几乎是英文保存的意思,所以很容易忘记哪个是哪个