次のコードを考えてみましょう ( 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;
}
なぜ2番目のパラメータが必要なのerase
ですか? (つまりstr1.end()
、この場合。)
remove
toによって返されるイテレータを提供できないのはなぜerase
ですか? 消去するコンテナーの最後の要素についても通知する必要があるのはなぜですか?
ここでの落とし穴はerase
、2 番目のパラメーターなしで呼び出すこともできますが、明らかに間違った結果になることです。
コンテナの最後を の 2 番目のパラメータとして渡したくないユースケースはありますerase
か?
erase-remove イディオムの 2 番目のパラメーターを省略すると、erase
常にエラーになりますか、それとも有効なことでしょうか?