考虑以下代码(取自cppreference.com,稍作修改):
#include <algorithm>
#include <string>
#include <iostream>
#include <cctype>
int main()
{
std::string str1 = " Text with some spaces";
str1.erase(std::remove(str1.begin(), str1.end(), ' '), str1.end());
std::cout << str1 << '\n';
return 0;
}
为什么第二个参数是erase
必要的?(即str1.end()
在这种情况下。)
为什么我不能只提供 to 返回的迭代remove
器erase
?为什么我还必须告诉它要擦除的容器的最后一个元素?
这里的陷阱是你也可以在erase
没有第二个参数的情况下调用,但这显然会产生错误的结果。
是否存在我不想将容器的末尾作为第二个参数传递给的用例erase
?
省略erase
擦除删除习语的第二个参数总是一个错误,或者这可能是一个有效的事情吗?