#include <iostream>
#include <algorithm>
#include <list>
#include <vector>
#include <functional>

using namespace std;

int main()
{
  list<int> list1;
  for (int k=0;k<10;k++)
  {
    list1.push_back(k);
    list1.push_front(k);
  }

  list<int>::iterator list_iter1;
  for (list_iter1 = list1.begin();list_iter1 != list1.end();++list_iter1)
  {
    cout << *list_iter1 << " ";
  }
  cout << endl;
  cout << "list1 size: " << list1.size() << endl;
  cout << "----------------------------------------" << endl;

  list<int>::iterator list_iter_end;
  list_iter_end = remove(list1.begin(),list1.end(),3);
  for (list_iter1 = list1.begin(); list_iter1 != list1.end(); ++list_iter1)
  {
    cout << *list_iter1 << " ";
  }
  cout << endl;
  cout << "list1 size: " << list1.size() << endl;
  cout << "----------------------------------------" << endl;

  for (list_iter1 = list1.begin(); list_iter1 != list_iter_end; ++list_iter1)
  {
    cout << *list_iter1 << " ";
  }
  cout << endl;
  cout << "list1 size: " << list1.size() << endl;
  cout << "----------------------------------------" << endl;

  cout << "删除元素的个数:" <<distance(list_iter_end,list1.end())<< endl;

  //真正的删除
  list<int>::iterator list_iter3 = list1.begin();
  ++list_iter3;
  ++list_iter3;
  ++list_iter3;
  list1.erase(list1.begin(), list_iter3);

  for (list_iter1 = list1.begin(); list_iter1 != list1.end(); ++list_iter1)
  {
    cout << *list_iter1 << " ";
  }
  cout << endl;
  cout << "list1 size: " << list1.size() << endl;
  cout << "----------------------------------------" << endl;

  vector<int> vec1;
  for(int k=0;k<10;k++)
  {
    vec1.push_back(k);
  }

  for (int k =6; k<16; k++)
  {
    vec1.push_back(k);
  }

  vector<int>::iterator vec_iter1;
  for (vec_iter1 = vec1.begin();vec_iter1 != vec1.end();++vec_iter1)
  {
    cout << *vec_iter1 << " ";
  }
  cout << endl;
  cout << "vec1 size: " << vec1.size() << endl;
  cout << "----------------------------------------" << endl;

  vector<int>::iterator vec_iter2 = remove(vec1.begin(),vec1.end(),11);
  vec1.erase(vec_iter2, vec1.end());

  for (vec_iter1 = vec1.begin(); vec_iter1 != vec1.end(); ++vec_iter1)
  {
    cout << *vec_iter1 << " ";
  }
  cout << endl;
  cout << "vec1 size: " << vec1.size() << endl;
  cout << "----------------------------------------" << endl;

  vector<int>::iterator vec_iter4 = remove_if(vec1.begin(),vec1.end(),bind2nd(less<int>(),6));
  vec1.erase(vec_iter4,vec1.end());

  for (vec_iter1 = vec1.begin(); vec_iter1 != vec1.end(); ++vec_iter1)
  {
    cout << *vec_iter1 << " ";
  }
  cout << endl;
  cout << "vec1 size: " << vec1.size() << endl;
  cout << "----------------------------------------" << endl;

  system("pause");
  return 0;
}

========================================

9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
list1 size: 20
----------------------------------------
9 8 7 6 5 4 2 1 0 0 1 2 4 5 6 7 8 9 8 9
list1 size: 20
----------------------------------------
9 8 7 6 5 4 2 1 0 0 1 2 4 5 6 7 8 9
list1 size: 20
----------------------------------------
删除元素的个数:2
6 5 4 2 1 0 0 1 2 4 5 6 7 8 9 8 9
list1 size: 17
----------------------------------------
0 1 2 3 4 5 6 7 8 9 6 7 8 9 10 11 12 13 14 15
vec1 size: 20
----------------------------------------
0 1 2 3 4 5 6 7 8 9 6 7 8 9 10 12 13 14 15
vec1 size: 19
----------------------------------------
6 7 8 9 6 7 8 9 10 12 13 14 15
vec1 size: 13
----------------------------------------
请按任意键继续. . .

C++ remove remove_if erase的更多相关文章

  1. STL:remove和erase区别

    C++ STL中的remove和erase函数曾经让我迷惑,同样都是删除,两者有什么区别呢? vector中的remove的作用是将等于value的元素放到vector的尾部,但并不减少vector的 ...

  2. remove、erase

    remove: remove不是真正的删除,删除后数量并没有变化. 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器. 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用需 ...

  3. 移除元素(remove,remove_if...unique...)

    remove 因为本算法作用的是iterator,所以并不会改变Container大小,会返回一个新的iterator new_last,是的first到new_last中的元素都不等于value,左 ...

  4. STL笔记(4)关于erase,remove

    STL笔记(4)关于erase,remove 你要erase的元素很容易识别.它们是从区间的“新逻辑终点”开始持续到区间真的终点的原来区间的元素.要除去那些元素,你要做的所有事情就是用那两个迭代器调用 ...

  5. C++ count_if/erase/remove_if 用法详解

    每次使用这几个算法时都要去查CPP reference,为了能够加深印象,整理一下基本应用. cout/cout_if:  return the number of elements satisfyi ...

  6. C++中vector的remove用法

      我将从remove的复习开始这个条款,因为remove是STL中最糊涂的算法.误解remove很容易,驱散所有关于remove行为的疑虑——为什么它这么做,它是怎么做的——是很重要的. 这是rem ...

  7. STL源代码分析——STL算法remove删除算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法. ...

  8. c++转载系列 std::vector模板库用法介绍

    来源:http://blog.csdn.net/phoebin/article/details/3864590 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作 ...

  9. C++ 中的std::vector介绍(转)

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vec ...

随机推荐

  1. sklearn特征工程

    目录 一.    特征工程是什么?    2 ①特征使用方案    3 ②特征获取方案    4 ③特征处理    4 1.    特征清洗    4 2.    数据预处理    4 3.    特 ...

  2. eclipse开发scrapy爬虫工程,附爬虫临门级教程

    写在前面 自学爬虫入门之后感觉应该将自己的学习过程整理一下,也为了留个纪念吧. scrapy环境的配置还请自行百度,其实也不难(仅针对windows系统,centos配置了两天,直到现在都没整明白) ...

  3. GVIM、VIM

    全世界最好的编辑器VIM之Windows配置篇 Highlight all search pattern matches Top 10 things Vi user need to know abou ...

  4. linux(centos)下安装supervisor进程管理工具

    在接触supervisor进程管理工具之前,使用springboot打包部署到linux服务器的流程是这样子的,如下图所示: 上图展示的就是最一般的流程,如果项目是小项目或者demo可以这样子去部署, ...

  5. Tomcat 启动闪退解决

    直接使用cmd进入tomcat 目录下进行启动,直接使用Catalina.bat run运行,查看报啥错.进一步进行解决

  6. Road to Cinema(贪心+二分)

    https://www.cnblogs.com/flipped/p/6083973.html       原博客转载 http://codeforces.com/group/1EzrFFyOc0/co ...

  7. HDU 6741 树上删叶子节点博弈

    假设现在有一颗树A 我们在他非叶子节点上加一个点变成树B 则此时树B必为先手必胜 假设A为先手必胜 则先手直接把加入的点一同删去 假设A为先手必败 则先手可以只删加入的点 与后手位置互换 把必败态留给 ...

  8. pipenv安装报错ReadTimeoutError

    原因:pip下载源默认设置为国外 解决:将pip下载源切换为国内地址 操作: 在C:\Users\Administrator\下新建pip文件夹,在创建pip.ini文件,拷贝下面代码进去,保存 切换 ...

  9. JDK源码那些事儿之HashMap.TreeNode

    前面几篇文章已经讲解过HashMap内部实现以及红黑树的基础知识,今天这篇文章就讲解之前HashMap中未讲解的红黑树操作部分,如果没了解红黑树,请去阅读前面的两篇文章,能更好的理解本章所讲解的红黑树 ...

  10. Leet爬楼梯问题

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...