码迷,mamicode.com
首页 > 编程语言 > 详细

C++ STL模板

时间:2016-06-13 01:05:58      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

  C++中的STL(Standard Template Library)用起来挺方便的,这里我们来做一下总结

一、set

  set是STL中一种标准关联容器 (vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用 平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。

  在set中元素都是唯一的,而且默认情况下会对元素 自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。

  1)插入(insert)

  set的元素添加时使用insert()方法,示例如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(){
 5     set<int>s;
 6     int n;
 7     cout << "input: ";
 8     for(int i = 0; i < 5; i++){
 9         cin >> n;
10         s.insert(n);
11     }
12     cout << "output: ";
13     for(set<int>::iterator it = s.begin(); it != s.end(); ++it){
14         cout << *it <<  ;
15     }
16 }

  运行结果如下:

  技术分享

  可见set已为我们剔除了相同的元素了,并且默认升序输出。假如我们想构造一个升序的set,可以这样声明:set<int, greater<int>> s ;

  2)历遍

  set的历遍一般是用迭代器iterator,这是对指针的封装,示例代码如上。

  3)初始化

  我们可以使用数组来进行初始化,或者用复制构造函数:

1 int main(){
2     int A[3] = {1, 2, 3};
3     set<int> setA(A, A + 3);
4     set<int> setB(setA);
5 }

     4)并集、交集、差集

  利用set的方法可以方便地求出并集、交集和差集: 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(){
 5     int A[3] = {1, 2, 3};
 6     int B[4] = {1, 2, 4, -1};
 7     set<int> setA(A, A + 3);
 8     set<int> setB(B, B + 4);
 9     set<int> set1, set2, set3;
10     
11     set_union(setA.begin(), setA.end(), setB.begin(), setB.end(), insert_iterator<set<int>>(set1, set1.begin()));
12     set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(), insert_iterator<set<int>>(set2, set2.begin()));
13     set_difference(setA.begin(), setA.end(), setB.begin(), setB.end(), insert_iterator<set<int>>(set3, set3.begin()));
14     
15     cout << "union: ";
16     for(set<int>::iterator it = set1.begin(); it != set1.end(); ++it) cout << *it <<  ; cout << endl;
17 
18     cout << "intersection: ";
19     for(set<int>::iterator it = set2.begin(); it != set2.end(); ++it) cout << *it <<  ; cout << endl;
20 
21     cout << "difference: ";
22     for(set<int>::iterator it = set3.begin(); it != set3.end(); ++it) cout << *it <<  ; cout << endl;
23 }

   三个函数的参数都类似,运行效果如下:

  技术分享

 

  //To be continued.

  

 

  

C++ STL模板

标签:

原文地址:http://www.cnblogs.com/Vincent-Bryan/p/5579233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!