zoukankan      html  css  js  c++  java
  • cb43a_c++_STL_算法_删除_(1)remove_remove_if

    cb43a_c++_STL_算法_删除_(1)remove_remove_if
    remove()
    remove_if()

    注意:
    1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没有减少
    最后的一位或者两个的数据向前移动后,最后的数据没有其他数据覆盖,所以数据依然存在。
    2.返回值是:新的逻辑终点,删除后,都采用逻辑终点。
    error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
    vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可

    //真正的删除用list的成员函数erase

     1 /*cb43a_c++_STL_算法_删除_(1)remove_remove_if
     2 remove()
     3 remove_if()
     4 
     5 注意:
     6 1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没有减少
     7 最后的一位或者两个的数据向前移动后,最后的数据没有其他数据覆盖,所以数据依然存在。
     8 2.返回值是:新的逻辑终点,删除后,都采用逻辑终点。
     9 error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
    10 vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可
    11 
    12 //真正的删除用list的成员函数erase
    13 
    14 
    15 */
    16 #include <iostream>
    17 #include <algorithm>
    18 #include <list>
    19 #include <vector>
    20 #include <functional>
    21 
    22 
    23 using namespace std;
    24 template <typename TT>
    25 void print(TT &il)
    26 {
    27     for (TT::iterator iter = il.begin(); iter != il.end(); ++iter)
    28     
    29         cout << *iter << ' ';
    30     cout << endl;
    31 }
    32 
    33 int main()
    34 {
    35     list<int> ilist;
    36     for (int i = 1; i <= 6; ++i)
    37     {
    38         ilist.push_front(i);
    39         ilist.push_back(i);
    40     }
    41     print(ilist);
    42     
    43     list<int>::iterator end;
    44     end=remove(ilist.begin(), ilist.end(), 3);//返回的是一个逻辑终点。不是ilist.end的位置
    45     cout << "3删除后的情况:" << endl;
    46     print(ilist);
    47 
    48     cout << "返回一个逻辑终点的情况:" << endl;
    49 
    50     for (list<int>::iterator iter = ilist.begin(); iter != end; ++iter)
    51     {
    52         cout << *iter << ' ';
    53         
    54     }
    55     cout << endl;
    56     cout << "一共删除了:" << distance(end, ilist.end()) << " 个元素" << endl;
    57 
    58     cout << "真正的删除,erase后的结果。" << endl;
    59     ilist.erase(end, ilist.end());
    60     print(ilist);
    61 
    62     vector<int> ivec;
    63     for (int i = 2; i <= 6; ++i)
    64         ivec.push_back(i);
    65     for (int i = 4; i <= 9; ++i)
    66         ivec.push_back(i);
    67     for (int i = 1; i <= 7; ++i)
    68         ivec.push_back(i);
    69     cout << "vector里面的数据:" << endl;
    70     print(ivec);
    71 
    72     cout << "删除5,remove与erase结合" << endl;
    73     ivec.erase(remove(ivec.begin(), ivec.end(), 5),ivec.end());
    74     print(ivec);
    75 
    76     cout << "remove_if结合预定义的函数对象进行操作,删除小于5的数,实现真正的删除" << endl;
    77     //remove_if返回一个迭代器的位置,然后,erase迭代器之间的数据。
    78     ivec.erase(remove_if(ivec.begin(), ivec.end(), bind2nd(less<int>(), 5)), ivec.end());
    79     print(ivec);
    80     return 0;
    81 }
    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    线程池中shutdown()和shutdownNow()方法的区别
    java.util.concurrent.TimeoutException: Idle timeout expired: 300000/300000 ms
    ConnectTimeout和ReadTimeout所代表的意义
    hive 查询注意问题
    java面试题之int和Integer的区别
    MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
    MySQL数据库使用mysqldump导出数据详解
    C++宏定义详解
    OTL调用存储过程/函数及注意事项
    linux自定义开机启动服务和chkconfig使用方法
  • 原文地址:https://www.cnblogs.com/txwtech/p/12356415.html
Copyright © 2011-2022 走看看