江琛

STL容器

常用:

1 . vector

动态数组,支持正常数组sort格式。

遍历时注意借用迭代器 vector<int>iterator:: it;

2022.5.24补:遍历时不需要迭代器

2 . list

与vector类似,可以相互替代,但是各有优缺点

list采用链式思想,借用链表知识,便于插入删除,但花费空间大(因为有一个数组域和指针域)

注:调用sort()形式为 对象名.sort(),与一般数组方式不同

3.string

字符动态存储容器

插入字符采用 insert(位置,“字符”)

删除采用 erase(位置 ,数字(即删除几个))

注:位置都是从0开始

3.map

映射思想

通过map<类型1,类型2> 空间映射以节省空间

实际做题时可以数组太大要遍历计次数可以采用map

例如 : map< ll k1, ll k2> m; m[ a [ i ] ] ++;

其中 a[ i ] 可理解为 k1,而 ++所得的值就是对应k2的值,在a [ i ]数组非常大的情况下可以很好做到节省空间统计次数.

2022.5.24补:map会对次数从小到大自动排序   若次数相同则按  类型1 的ASCII从小到大排序

4 . set

自动排序查重功能,如果不想要查重可以写mutiset , 但也可以sort

插入数据只能用 对象名.insert , 不支持push_back()

不常用:

5 . queue

队列思想,先进先出(食堂打饭),不能做到遍历容器(因为每出一个人实际人数就在改变,我们不把这种定义为遍历),一般采用while循环查看队列内容 , 即 :

while( ! 对象名.empty() ) 其中 队头为 :对象名.front() ; 队尾为:对象名.back();

6 . stack

栈的思想,先进后出(挤公交),不能遍历容器同queue, 出栈采用 对象名.pop();

7.deque

双向队列 ,理解为一条隧道  两边进的往里面走。只能两头插入  push_back与push_front。

小结:

这些容器都是模板,要遍历都需要通过迭代器进行查看 容器名称<类型>iterator:: it;

2022.5.24补:auto可以自动识别

都有插入删除操作 但是有些区别:

string的erase( 内容1,内容2) 内容2可以是数字 代表长度 要删多少个 但是其他容器做不到

vector的erase(内容1,内容2) 都得代表一个位置 和数组类似,比较人性化 如:

可以使用 对象名.begin() + 1,表示从数组第 1 位开始删

其他容器的erase相对没有string与vector的这么好用 list也不行。
————————————————
版权声明:本文为CSDN博主「jc0620」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jc0620/article/details/124463095

posted on 2022-04-29 22:04  江琛  阅读(34)  评论(0编辑  收藏  举报

导航