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 }
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 }
序列式:
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