• 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
  • 相关阅读:
    算法学习:二分法从入门到精通
    TypeScript筑基笔记一:Visual Studio Code 创建Typescript文件和实时监控
    LeetCode 92. 反转链表 II
    LeetCode 1525. 字符串的好分割数目
    字节跳动-people后台一面面经
    LeetCode 117. 填充每个节点的下一个右侧节点指针 II
    LeetCode 1529. 灯泡开关 IV
    LeetCode 165. 比较版本号
    LeetCode 312. 戳气球
    LeetCode 605. 种花问题
  • 原文地址:https://www.cnblogs.com/txwtech/p/12356415.html
Copyright © 2020-2023  润新知