STL 补档
stl 补档
1.vector
作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
vector在c++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的和函数库。
#include <vector> using namespace std; vector<int> vec; vec.push_back(a); cout<<vec[0]<<endl; vector<int>::iterator it;//使用迭代器访问元素. for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl; vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a vec.erase(vec.begin()+2);//删除第3个元素
部分参考https://www.cnblogs.com/msymm/p/9006022.html 感谢!!
2.deque
容器属性
序列 | 动态数组 | allocator-aware
序列容器的元素按严格线性排列,可按顺序访问它们的位置;
动态数组允许直接访问其任何元素,可快速在序列首尾相对快速进行元素添加 / 删除;
容器通过 allocator 对象动态处理存储需求
除了写起来方便之外,时间复杂度很垃圾。。。
迭代器相关函数:
(public member function )
begin
将迭代器返回到开头(增长方向:begin -> end)
将迭代器返回到结尾
返回反向迭代器以反向开始(增长方向:rbegin -> rend)
将反向迭代器返回到反向结束
(c++11)
将const_iterator返回到开头(与begin类似,区别在于begin指向的值可以改变,cbegin指向的值不可改变)
(c++11)
将const_iterator返回到开头末尾
(c++11)
返回const_reverse_iterator以反向开始
(c++11)
将const_reverse_iterator返回到反向结束
参考https://blog.csdn.net/chnyac/article/details/82710050 感谢!!
3.list
是一个双向链表
关联容器:
4.set/multiset
multiset和set 可较快完成对一组数据的常规操作,包括:
multiset允许元素重复出现 set 保证元素唯一性,不允许元素重复
set操作:
#include<iostream> #include<set> //引入set库 using namespace std; int main() { set<int> s; //定义包含整数的set set<int>::iterator it; //定义迭代器 s.insert(8); //插入元素 s.insert(6); s.insert(6); s.insert(6); //循环输出所有元素 for(it=s.begin();it!=s.end();it++) cout<<*it<<endl; return 0; } #include<iostream> #include<set> //引入set库 using namespace std; int main() { set<int> s; //定义包含整数的set set<int>::iterator it; //定义迭代器 s.insert(6); s.insert(6); cout<<s.count(6)<<endl; //返回6的个数 cout<<s.count(7)<<endl; return 0; } #include<iostream> #include<set> using namespace std; int main() { set<int> s; s.insert(1); s.insert(2); s.insert(3); s.insert(3); cout<<s.size(); //求总数 return 0; } #include<iostream> #include<set> //引入set库 using namespace std; int main() { set<int> s; //定义包含整数的set set<int>::iterator it; //定义迭代器 s.insert(8); //插入元素 s.insert(6); s.erase(6); //删除元素 s.erase(6); for(it=s.begin();it!=s.end();it++) cout<<*it<<endl; return 0; } #include<iostream> #include<set> //引入set库 using namespace std; int main() { set<int> s; //定义包含整数的set set<int>::iterator it; //定义迭代器 s.insert(6); if(s.find(6)!=s.end())cout<<"found!"<<endl; else cout<<"not found!"<<endl; if(s.find(7)!=s.end())cout<<"found!"<<endl; else cout<<"not found!"<<endl; return 0; }
5.map/multimap
一个映射
操作有:
#include<iostream> #include<map> using namespace std; int main(){ map<char,int> d; map<char,int>::iterator it; // insert some values: d['a']=10; d['b']=20; d['c']=30; d['d']=40; d['e']=50; d['f']=60; it=d.find('b'); if(it!=d.end()) d.erase(it); // erasing by iterator d.erase('c'); // erasing by key d.erase('x'); // erasing by key // show content: for(it=d.begin(); it!=d.end(); ++it) cout<<it->first<<" "<<it->second<<endl; return 0; } #include<iostream> #include<map> using namespace std; int main (){ map<char,int> d; map<char,int>::iterator it; d['a']=50; d['b']=100; d['c']=150; d['d']=200; it=d.find('b'); if(it!=d.end()) d.erase(it); cout<<"a => "<<d.find('a')->second<<endl; cout<<"c => "<<d.find('c')->second<<endl; cout<<"d => "<<d.find('d')->second<<endl; return 0; } #include<iostream> #include<map> using namespace std; int main(){ map<char,int> d; d['a']=101; d['b']=202; d['c']=302; //cout<<d['x']<<endl; cout<<d.size()<<endl; return 0; } // accessing mapped values #include<iostream> #include<map> #include<string> int main(){ std::map<char,std::string> mymap; mymap['a']="an element"; mymap['b']="another element"; mymap['c']=mymap['b']; std::cout << "mymap['a'] is " << mymap['a'] << '\n'; std::cout << "mymap['b'] is " << mymap['b'] << '\n'; std::cout << "mymap['c'] is " << mymap['c'] << '\n'; std::cout << "mymap['d'] is " << mymap['d'] << '\n'; std::cout << "mymap now contains " << mymap.size() << " elements.\n"; return 0; } /* notice how the last access (to element 'd') inserts a new element in the map with that key and initialized to its default value (an empty string) even though it is accessed only to retrieve its value. member function map::find does not produce this effect. */ #include<iostream> #include<map> using namespace std; int main(){ map<char,int> d; map<char,int>::iterator it; d['b'] = 100; d['a'] = 200; d['c'] = 300; // show content: for(it=d.begin();it!=d.end();++it) cout<<it->first<<" "<<it->second<<endl; for(it=d.begin();it!=d.end();++it) cout<<(*it).first<<" "<<(*it).second<<endl; return 0; } #include<iostream> #include<map> #include<string> using namespace std; int main(){ map<char,string> d; d['a']="wawawa"; d['b']="hahaha"; d['c']=d['a']; d['b']="hohoho"; cout<<d['a']<<endl; cout<<d['b']<<endl; cout<<d['c']<<endl; cout<<d['x']<<endl; return 0; }
共有的成员函数:
empty size swap
至于我前面讲的 stack queue 都是 辣鸡 很慢,千万别用。 最好自己写。
感谢大家阅读。。!
上一篇: Nikitosh 和异或(trie树)
下一篇: 喝柠檬水好吗好处有哪些?