17

次のコードを考えてみましょう ( 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()、この場合。)

removetoによって返されるイテレータを提供できないのはなぜeraseですか? 消去するコンテナーの最後の要素についても通知する必要があるのはなぜですか?

ここでの落とし穴はerase、2 番目のパラメーターなしで呼び出すこともできますが、明らかに間違った結果になることです。

コンテナの最後を の 2 番目のパラメータとして渡したくないユースケースはありますeraseか?

erase-remove イディオムの 2 番目のパラメーターを省略すると、erase常にエラーになりますか、それとも有効なことでしょうか?

4

1 に答える 1