相关疑难解决方法(0)

擦除和删除之间的区别

我对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";
}
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出均为2,2.

但是,如果我使用erase删除这样的东西:

a.erase(std::remove(a.begin(), a.end(), 1), a.end());
Run Code Online (Sandbox Code Playgroud)

我得到输出为2.

所以我的问题是:

(1).有没有使用std :: remove而不是使用擦除功能.

(2).即使在执行std :: remove之后,为什么a.size()返回2而不是1?

我在Scott Meyer的Effective STL书中读到了关于擦除删除习语的内容.但我仍然有这种困惑.

c++ stl

47
推荐指数
6
解决办法
4万
查看次数

标签 统计

c++ ×1

stl ×1