同学们在学习C++的容器时,不免会发现,其操作大体一致,无非是不同的容器有自身属性上的一点点区别,下面我就和大家总结一下吧!
容器顾名思义就相当于一个大盒子,里面封装了我我们应用所需要的全部依赖,并形成了一个独立的运行环境。简单来说,你只需记住几个函数,就可以针对许多的问题和不同的数据类型进行增删改查等操作。
无论是序列容器还是关联式容器,我们最常用的操作如查找,排序,求和等
对数据进行遍历的操作方法是类似的。
既然类似我们就可以通过泛型编程的思想,提供一个"中介",来隐藏不同容器的差别,
而向上提供统一的接口,而这个"中介"便是迭代器!
迭代器的使用和指针非常类似:
//3个1初始化容器
vector<int> V(3,1);
//迭代器-->容器V的起始地址
vector<int>::iterator it = V.begin();
cout<< *it <<endl; //输出的就是起始元素
string容器中就是函数调用,这里就简单的列出来吧
操作 | 函数 | 符号 |
---|---|---|
赋值 | .assign() | = |
拼接 | .append() | += |
查找 | .find() | |
替换 | .replace() | |
比较 | .compare() | == != |
存取 | .at() | [ ] |
插入 | .insert() | |
删除 | .erase() | |
截取 | .substr() |
vector容器又称为单端数组 ,允许随机访问
操作 | 函数 | 说明 |
---|---|---|
尾增 | .push_back() | |
尾删 | .pop_back() | |
头增 | .push_front() | |
头删 | .pop_front() | |
插入 | .insert() | 迭代器+数据 |
删除 | .erase() | 迭代器指位置 |
存取 | .at() | 也可用 [ ] 号 |
判空 | .empty() | 返回bool型 |
容量 | .capacity() | |
大小 | .size() | 返回int型 |
重定大小 | .resize() | |
交换 | .swap() | |
清除 | .clear() | |
反转 | .reverse() | |
排序 | sort() | 全局函数 |
deque容器又称为双端数组,以数组为节点,链表一样串起来的结构,允许随机访问,但没有容量的概念
操作 | 函数 | 说明 |
---|---|---|
尾增 | .push_back() | |
尾删 | .pop_back() | |
头增 | .push_front() | |
头删 | .pop_front() | |
插入 | .insert() | 迭代器+数据 |
删除 | .erase() | 迭代器指位置 |
存取 | .at() | 也可用 [ ] 号 |
判空 | .empty() | 返回bool型 |
大小 | .size() | 返回int型 |
交换 | .swap() | |
清除 | .clear() | |
反转 | .reverse() | |
排序 | sort() | 全局函数 |
操作 | 函数 | 说明 |
---|---|---|
入栈 | .push() | |
出栈 | .pop() | |
栈顶 | .top() | |
判空 | .empty() | 返回bool型 |
栈大小 | .size() | 返回int型 |
操作 | 函数 | 说明 |
---|---|---|
入队列 | .push() | |
出队列 | .pop() | |
队首 | .front() | |
队尾 | .back() | |
判空 | .empty() | 返回bool型 |
队列长度 | .size() | 返回int型 |
list容器相当于一个双向链表,链表并不是连续的存储空间,因此list的迭代器只支持前移和后移
操作 | 函数 | 说明 |
---|---|---|
尾增 | .push_back() | |
尾删 | .pop_back() | |
头增 | .push_front() | |
头删 | .pop_front() | |
插入 | .insert() | 迭代器+数据 |
删除 | .erase() | 迭代器指位置 |
.remove() | 可直接指定元素 | |
存取 | .at() | 也可用 [ ] 号 |
判空 | .empty() | 返回bool型 |
大小 | .size() | 返回int型 |
交换 | .swap() | |
清除 | .clear() | |
反转 | .reverse() | |
排序 | .sort() | 成员函数,仿函数定排序规则 |
set/multiset(数据可重复)容器的底层由二叉树实现
操作 | 函数 | 说明 |
---|---|---|
数据插入 | .insert() | 没有pushback用 |
判空 | .empty() | 返回bool型 |
大小 | .size() | 返回int型 |
交换 | .swap() | |
删除 | .erase() | 迭代器或数指定 |
清除 | .clear() | |
查找 | .find() | 返回迭代器 |
统计 | .count() | 返回int型 |
map/multimap(键值可重复)容器,所有元素都是pair类型成对存在,pair( 键值 ,实值 ),键值相当于索引
其底层也是由二叉树实现
操作 | 函数 | 说明 |
---|---|---|
数据插入 | .insert(第一种) | pair<类型,类型>(键值,实值) |
.insert(第二种) | make_pair(键值,实值)* | |
插入和访问 | 名字[位置] | 可插入也可访问 |
判空 | .empty() | 返回bool型 |
大小 | .size() | 返回int型 |
交换 | .swap() | |
删除 | .erase() | 迭代器或数指定 |
清除 | .clear() | |
查找 | .find() | 返回迭代器 |
统计 | .count() | 返回int |