zoukankan      html  css  js  c++  java
  • C++标准模板库(STL)介绍:set的基本用法

    1、元素的方向遍历

    使用反向迭代器reverse_iterator可以反向遍历集合,输出集合元素的反向排序结果。它需要用到rbegin()和rend()两个方法,它们分别给出了反向遍历的开始位置和结束位置。

     1 #include<iostream>
     2 #include<set>
     3 using namespace std;
     4 
     5 int main(){
     6     set<int> st;
     7     st.insert(5); 
     8     st.insert(1);
     9     st.insert(6);
    10     st.insert(3);
    11     set<int>::reverse_iterator rit; //定义反向迭代器
    12     //反向遍历st中的所有元素
    13     for (rit = st.rbegin(); rit != st.rend(); rit++)
    14         cout << *rit << " ";
    15     cout << endl;
    16     return 0;
    17 }
    18 //运行结果:6 5 3 1
    View Code

     2、求解set的交、并、差、对称差的函数

    #include <algorithm>
    set_intersection(取集合交集)
    set_union(取集合并集)
    set_difference(取集合差集)
    set_symmetric_difference(取集合对称差集)

    这几个函数的前四个参数一样,只有第五个参数有多重版本。

    EX1:

    set_union(A.begin(),A.end(),B.begin(),B.end(),inserter( C1 , C1.begin() ) );

    前四个参数依次是第一的集合的头尾,第二个集合的头尾。第五个参数的意思是将集合A、B取合集后的结果存入集合C中。

    EX2:

    set_union(A.begin(),A.end(),B.begin(),B.end(),ostream_iterator<int>(cout," “));

    第五个参数的意思是将A、B取合集后的结果直接输出,(cout," ")双引号里面是输出你想用来间隔集合元素的符号或是空格。

     1 #include <iostream>     
     2 #include <algorithm>    
     3 #include <iterator>
     4 #include <vector>       
     5 #include <set>
     6 using namespace std;
     7 
     8 void print(set<int>& st) {
     9     set<int>::iterator it;
    10     for (it = st.begin(); it != st.end(); it++)
    11         cout << *it << " ";
    12     cout << endl;
    13 }
    14 int main() {
    15     set<int> st1, st2, st3;
    16     for (int i = 0; i < 6; i++) {
    17         st1.insert(i);
    18         st2.insert(i + 6);
    19     }
    20     st1.insert(6);
    21     cout << "st1:";
    22     print(st1);
    23     cout << "st2:";
    24     print(st2);
    25     set_union(st1.begin(), st1.end(), st2.begin(), st2.end(), inserter(st3, st3.begin()));
    26     cout << "st3:";
    27     print(st3);
    28     set_union(st1.begin(), st1.end(), st2.begin(), st2.end(), ostream_iterator<int>(cout, "*"));
    29     
    30     return 0;
    31 }
    View Code

    输出结果:

  • 相关阅读:
    无锁队列的实现
    C/C++语言中闭包的探究及比较
    Linus:利用二级指针删除单向链表
    Unix考古记:一个“遗失”的shell
    “C++的数组不支持多态”?
    Alan Cox:单向链表中prev指针的妙用
    二叉树迭代器算法
    C语言全局变量那些事儿
    数据即代码:元驱动编程
    C++模板”>>”编译问题与词法消歧设计
  • 原文地址:https://www.cnblogs.com/fuqia/p/9249656.html
Copyright © 2011-2022 走看看