单端数组,双向迭代器,随机存取 内存动态扩充,复制到内存中足够大的位置后删掉原来的数据
#include<vector> //**************vector**************// //构造 vector<int> v1; vector<int> x(10, 0);//10个0 vector<int> p(x);//copy vector<int> y(x.begin(), x.end());//copy vector<vector<int>> v(m, vector<int>(n, 0)); //m*n的二维数组,所有元素初始化为0 //赋值 vector<int> v2 = v1; v1.assign(x.begin(), x.end()); v1.assign(10, 0);//10个0 v1.swap(v2);//交换 //遍历 for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++) { cout << *it << " "; } //大小操作 v1.size();//大小 v1.empty();//true为空 v1.resize(10);//重新指定容器长度为10(大于填充0,小于删除) v1.resize(10,100);//100默认填充值 v1.capacity();//容量 //读取 v1[0]; v1.at(0); v1.front(); v1.back(); //插入 v1.insert(v1.begin(), 66);//传入迭代器 v1.push_back(10); //删除 v1.pop_back();//尾删 v1.erase(v1.begin(), v1.begin() + 2);//区间删 v1.clear();//清空 //收缩空间 vector<int>(v1).swap(v1);//vector<int>(v1)复制匿名对象 //预留空间 v1.reserve(10000);//一次扩充避免多次扩充内存 //**************vector**************//双端数组,双向迭代器,随机存取 没有容量,容量扩充时不连续,表维护内存
#include<deque> //**************deque**************// deque<int> d; //增 d.push_front(10); //删 d.pop_front(); //**************deque**************//没有迭代器
#include<stack> #include<queue> //**************stack**************// stack<int> s; //增 s.push(10); //删 s.pop(); //栈顶 s.top(); //**************stack**************// //**************queue**************// queue<int> q; //增 q.push(10); //删 q.pop(); //队头 q.front(); //**************queue*************//双向循环链表,不支持随机存取
#include<list> //**************list*************// bool my_sort(int p1, int p2) { return p1 > p2; } list<int> L; L.push_back(30); L.push_back(40); L.push_back(7000); L.push_front(100); L.reverse();//反转 L.remove(100);//删除所有=100的值 L.sort();//从小到大 L.sort(my_sort);//修改排序为从大到小 //**************list*************//内部由红黑树实现,自动排序(二叉排序树,默认从小到大) Set键值唯一,Mutiset键值可重复,不允许根据迭代器修改键值,只能增/删
#include<set>//包含set和multiset //**************set/mutiset*************// set<int> st; st.insert(10); st.insert(20); st.insert(30); st.erase(200);//按值 st.erase(st.begin());//按迭代器 set<int>::iterator it=st.find(30);//按值,返回迭代器,失败返回end int c=st.count(30);//统计个数 it = st.lower_bound(20);//返回>=20的迭代器 it = st.upper_bound(20);//返回>20的迭代器 pair<set<int>::iterator, set<int>::iterator> p;//对,第一个low,第二个up p = st.equal_range(20); *p.first;//>=20的迭代器 *p.second;//>20的迭代器 //pair构造 pair<int, double> p(10, 20.0); pair<int, string> p = make_pair(10, "A"); class Person { public: int m_age; string m_name; Person(int age, string name) { this->m_age = age; this->m_name = name; } }; class person_compare { public: //改变排序规则,从大到小< bool operator()(const Person& p1, const Person& p2) const {return p1.m_name < p2.m_name;} }; //set存放自定义类数据,先指定排序规则 set<Person, person_compare> s; Person p1(10, "a"); Person p2(60, "b"); Person p3(30, "c"); s.insert(p1); s.insert(p2); s.insert(p3); for (set<Person, person_compare>::iterator it = s.begin(); it != s.end(); it++) { cout << "Name " << it->m_name << " Age " << it->m_age << endl; } //**************set/mutiset*************//存放键值对,key和set类似 Map键值唯一,Multimap键值可重复
#include<map>//包含map和multi map<int, int> m; //插入 m.insert(pair<int, int>(1, 10)); m.insert(make_pair(2, 20));//√ m.insert(map<int, int>::value_type(3, 30));//不建议使用 m[4] = 40;//不建议使用 //删除 m.clear(); m.erase(4);//按key删除 //查找 auto pos = m.find(3);//返回迭代器 int counter = m.count(3);//统计