九、STL算法-删除算法(unique、remove)

来源:互联网 发布:大数据先进技术研究院 编辑:程序博客网 时间:2024/05/22 01:59

STL算法-删除算法(unique、remove)

一、简介

删除算法的作用是删除一个容器里的某些元素,它具有以下2个特征:

  1. 删除不会使容器里的元素减少
  2. 删除算法不应作用于关联容器

容器里的元素被删除时,分以下几个步骤进行:

  1. 将所有应该被删除的元素看做空位子
  2. 用留下的元素从后往前移,依次去填空位子
  3. 元素往前移后,它原来的位置也就算是空位子
  4. 也应由后面的留下的元素来填上
  5. 最后,没有被填上的空位子,维持其原来的值不变

二、删除算法

成员函数

三、程序示例

#include <iostream>#include <algorithm>#include <iterator>using namespace std;int main(){    int a[] = {0, 1, 3, 5, 2, 2, 2, 3, 6};    ostream_iterator<int> oit(cout, " ");    int * p = remove(a, a+9, 2);    copy(a, a+9, oit);    cout<<endl<<p-a<<endl;     //只会删除连续的相同的两个值,可以先排序,再使用unique     int b[] = {0, 1, 3, 5, 2, 2, 2, 3, 6, 7};    int *p2 = unique(b, b+10);    //可以输出容器删除元素后的全部元素值,也可以只输出到元素被删除后容器的"有效元素"的位置 //  copy(b, b+10, oit);     copy(b, p2, oit);    return 0;}

输出:

0 1 3 5 3 6 2 3 6
6
0 1 3 5 2 3 6 7

第一个输出:删除2,剩下 { 0, 1, 3, 5, 空, 空, 空, 3, 6 },剩余的元素往前移,变成 { 0, 1, 3, 5, 3, 6, 空, 空, 空 },剩下的空位维持原来的值不变,即 { 0, 1, 3, 5, 3, 6, 2, 3, 6 }

第二个输出:删除2后,容器中剩下6个元素,p指向数组中下标为6的值,a即指针a[0],所以p-a输出6

0 0
原创粉丝点击