1.queue容器
基本概念: Queue是一种先进先出的数据结构,有两个出口
队列容器允许从一端新增元素,从另一端删除元素
队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历
1. 构造函数:
- queue<T> que;
- queue(const queue &que);
2. 赋值操作:
- queue& operator=(const queue &que);
3. 数据存取:
- push(elem);
- pop();
- back();
- front();
4. 大小操作:
- empty();
- size();
2. list容器
基本概念: 也是链表,是一种物理存储单元上的非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
功能: 将数据进行链式存储
STL中的链表是一个双向循环链表
由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。
1. list构造函数
- list<T> lst;
- list(beg, end);
- lsit(n, elem);
- list(const list &lst);
2. list赋值和交换
- assign(beg, end);
- assign(n, elem);
- list& operator=(const list &lst);
- swap(lst);
3. list大小操作
- size();
- empty();
- resize(num);
- resize(num, elem);
4. list插入和删除
- push_back(elem);
- pop_back();
- push_front(elem);
- pop_front();
- insert(pop, elem);
- insert(pos, n, elem);
- insert(pos, beg, end);
- clear(); 移除容器中所有的数据
- erase(beg, end);
- erase(pos);
- remove(elem);
5. list数据存取
- front();
- back();
6. lsit反转和排序
- reverse();
- sort();
排序规则: sort(bool Compare);
3. set/multiset容器
本质: set/multiset属于关联式容器,底层结构是用二叉树实现
所有元素都会在插入时自动被排序(异)
set/multiset区别:
- set不允许容器中有重复的元素
- multiset允许容器中有重复的元素
------
1. set构造和赋值
构造:
- set<T> st;
- set(const set &st);
赋值:
- set& operator=(const set &st);
2. set大小和交换
- size();
- empty();
- swap(st);
3. set插入和删除
- insert(elem);
- erase(pos);
- erase(beg, end);
- erase(elem);
- clear();
4. set查找和统计
- find(key);
- count(key);
5. pair对组创建
成对出现的数据,利用对组可以返回两个数据
- pair<type, type> p (value1, value2);
- pair<type, type> p = make_pair(value1, value2);
```c++
pair<string, int> p(string("Tom"), 20);
cout << "姓名: " << p.first << ", 年龄: " << p.second << endl;
6. set容器排序(默认升序, 这里是想改变排序规则)
- 利用仿函数, 可以改变排序规则
class Compare
{
bool operator()(int v1, int v2){
return v1 > v2;
}
};
set<int,Compare> s2;
for (set<int,Compare>::iterator it = s2.begin(); it != s2.end(); it++)
{
cout << *it << endl;
}
7. set存放自定义数据类型
4. map/multimap容器
基本概念:
- map中所有元素都为pair
- pair中第一个元素为key(键值),起索引作用,第二个元素为value(实值)
- 所有元素都会根据元素的键值自动排序
- map/multimap属于关联式容器,底层结构用二叉树实现
- 可以根据key快速找到value值
map和multimap区别:
- map不允许容器中有重复的key值元素
- multimap允许容器中有重复key值元素
------
1. map构造和赋值
- map<T1, T2> mp;
- map(const map &mp);
- map& operator =(const map &mp);
--------------------------
#include<map>
void printMap(map<int, int> &m)
{
for(map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key = " << (*it).first << ", value = " << it->second << endl;
}
}
void test01()
{
map<int, int> m;
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
printMap(m);
}
---------------------------
2. map大小和交换
- size();
- empty();
- swap(st);
3. map插入和删除
- insert(elem);
- erase(pos);
- erase(beg, end);
- erase(key);
- clear();
4. map查找和统计
- find(key);
- count(key);
其中,在map容器中的count() 不是0就是1;
在maltimap容器中count()可能大于1。
5. map容器排序
- map容器默认排序规则为 按照key值 从小到大进行排序
- 与set容器一样,利用仿函数来改变排序规则