stl自己的总结

容器分为:

序列式:vector动态数组,deque双向队列,list双向串行。

关联式容器:set,multiset,map,multimap,hash table

容器配接器:stack,queue,priority_queue

stl的数据结构:biset,string,valarray

 

string为basic_string的一个typedef,存储字符串

bitset  bitset<10> 一个长度为10的二进制串  bitset<10> bs(7)  为0000000111

 1 #include <iostream>
 2 #include <bitset>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     bitset<10> bs1(7);
10     bitset<10> bs2(string("1000101011"));
11     cout<<bs1<<endl;
12     cout<<bs2<<endl;
13     return 0;
14 }
View Code

valarray

可以对整个数组直接进行操作

 1 #include <iostream>
 2 #include <valarray>
 3 #include <string>
 4 
 5 using namespace std;
 6 
 7 template<typename T> void printValarray(const valarray<T>& va)
 8 {
 9     for(int i=0;i<va.size();i++)
10         cout<<va[i]<<" ";
11     cout<<endl;
12 }
13 
14 int main()
15 {
16     valarray<int> val(4);
17     printValarray(val);
18     valarray<int> val2(3,4);
19     printValarray(val2);
20     int ia[]={1,2,3,5,6};
21     valarray<int> va3(ia,sizeof(ia)/sizeof(ia[0]));
22     printValarray(va3);
23     valarray<int> va4(ia+1,4);
24     printValarray(va4);
25     val=(val2+va4)*va4;
26     printValarray(val);
27     return 0;
28 }
View Code

 

 

序列式:

vector,list,deque不可以相互嵌套实现

stack,queue,priority_queue可以基于以上三个高效实现。

vector:随机访问高效,可以用下标操作

push_back(),pop_back();insert()

统计容器元素:size()目前大小,capacity()实际能够容纳,max_size()能够容纳最大数。

设置容器大小:resize(),reserve();

判断空:empty();

清空:clear();删除:erase() ,erase(first,last)

返回某值的引用:vector<typename T> c   c.at(index)

c[index]直接进行值操作。

c.front()返回第一个元素 c.back()返回最后一个元素

迭代器相关:begin(),end(),rbegin(),rend()  

基于迭代器的算法:find(),find_if(first,last,条件)

元素排序:sort()

对象交换:swap()

 

list:插入删除高效

自动扩张,插入删除不会影响指向元素的指针,引用,不会造成失效,

不提供下标操作。

push_front(),pop_front(),push_back(),pop_back(),erase(),clear(),insert(),remove(),remove_if()

resize(),size(),max_size()  size_type型

begin(),end(),rbegin(),rend(),back(),front()

empty(),有迭代器

list_three.assign(list_one.begin(),list_one.end())  把list3中的一部分元素换成list1

list_two.assign(5,5.6)把list2中的五个元素换成5.6

 

运算符操作:operator== >= <= != < >     list<int> l1,l2

l1.push_back(1),l2.push_back(2)  直接if(l1>l2) 返回false;

 

其他成员函数:

merge() 把两个list合并,并按照升序排列

sort()默认从小排大

remove()直接把具体要删除的值删除--

remove_if(条件,值)-------------------两者删除要删除的所有的值

splice(iterator it,list & x)

splice(iterator it,list& x,iterator first)

splice(iterator it,list& x,iterator first,iterator last) 注意合并之后。x为空容器。

unique()把连续的一样的元素删除,保留一个

#include <algorithm>

not_equal_to<int> Pred;

unique(Pred)满足某种条件删除

list:很重要;但是无操作符[]  以及成员函数at()

 

deque:

插入费力。在两端插入删除很快

resize(),max_size(),size()

push_back(),push_front(),pop_back(),pop_front(),insert()

begin(),end(),rbegin(),rend()

back(),front()

empty()

erase(),clear()

assign()

有运算符[]即对下标进行操作

deque的模版函数:[] == < != <= >= > <

 

map/multimap

可通过operator重载排序

size(),empty(),find(),lower_bound(),upper_bound(),equal_range(),max_size(),count()

upper_bound()大于key的第一个元素

lower_bound()大于或等于key的第一个元素

equal_range()一对值大于或大于等于key的第一个元素

------以上三个均为返回迭代器

map/multimap

lower_bound()返回指向key前面的迭代器。

upper_bound()返回大于key的迭代器。

equal_range()返回两个第一个是lower_bound(),upper_bound().

map比较。实值比较。

swap(),begin(),end(),rbegin(),rend()

swap(m1,m2) m1.swap(m2),count()

 

算法函数:

for_each(iterator begin,iterator end,proc op)对first到end调用operator 

count(iterator begin,iterator end,const T& value)

count(iterator begin,iterator end,UnaryPredicate op)只有op为true时才计数

iterator max_element(iterator beg,iterator end)

iterator max_element(iterator beg,iterator end,compFunc op)

iterator min_element(iterator beg,iterator end)

iterator min_element(iterator beg,iterator end,compFunc op)

find(iterator begin,iterator end,const T& value)

find_if(iterator begin,iterator end,UnaryPredicate op)

i

posted @ 2016-04-11 15:08  指尖泛出的繁华  阅读(160)  评论(0编辑  收藏  举报