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