Я немного запутался в различии между использованием алгоритма 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?
Я прочитал статью в Скотте Мейере. Эффективная книга STL об идиоме стирания-удаления. Но я все еще испытываю эту путаницу.