C++ STL中的容器简介

来源:互联网 发布:win10安装软件失败 编辑:程序博客网 时间:2024/06/06 12:44

C++STL中提供了强大的容器(containers)来替代程序中常用的数据结构,主要包括:字符串(string), 动态数组 (vector), 队列(queue), 栈 (stack), 堆 (priority_queue), 链接表 (list), 集合 (set), 字典 (map)。

使用这些容器可以极大的简化程序的编写,提高编程的效率。也是我个人更喜欢C++(相对于C而言)的重要原因。废话不多说,直接来看看各个容器中常用的操作。

1. 各容器中常用的操作

Name vector deque string queue priority_queue stack list set map empty() 判断容器是否为空 有 有 有 有 有 有 有 有 size() 返回容器的大小 有 有 有 有 有 有 有 有 resize() 改变容器的大小 有 有 无 无 无 有 无 无 operator[] 使用下标取值 有 有 无 无 无 无 无 有 front() 访问第一个元素 有 C++11 有 无 无 有 无 无 back() 访问最后一个元素 有 C++11 有 无 无 有 无 无 push_back() 在容器末尾添加元素 有 有 无 无 无 有 无 无 pop_back() 弹出容器末尾的元素 有 C++11 无 无 无 有 无 无 push_front() 无 在容器首端添加元素 无 无 无 无 有 无 无 pop_front() 无 弹出容器首端的元素 无 无 无 无 有 无 无 push() 无 无 无 压入元素 有 有 无 无 无 pop() 无 无 无 弹出元素 有 有 无 无 无 insert() 插入元素 有 有 无 无 无 有 有 有 erase() 删除元素 有 有 无 无 无 有 有 有 clear() 将容器清空 有 有 无 无 无 有 有 有 begin() 返回容器首端的迭代器 有 有 无 无 无 有 无 有 end() 返回容器尾端的迭代器 有 有 无 无 无 有 无 有 rbegin() 反向首端反向迭代器 有 有 无 无 无 有 无 有 rend() 反向尾端反向迭代器 有 有 无 无 无 有 无 有

此外,priority_queue中的top()函数——取出堆中的最大(或最小)值;stack的top()函数——访问下一个元素(最近插入栈中的元素);set和map中的count()函数——返回某个元素出现的次数,也比较常用。

2. 容器应用的简单说明

在C++中,推荐使用vector来代替纯数组,使用string来表示字符串,deque则多用于表示增加删除特别频繁的数据(尤其是在前面——非最后一个增删数据)。queue、priority_queue、stack、set、map则用于存储特定类型的数据。
1 . 关于vector 2D数组

#include <vector>using namespace std;int main(){    vector<<vector int> > v2d;          // 注意,后方两个">"之间有空格    return 0;                           // 在实际使用中,可以用于表示图(vertex从1到N-1)}

2 . maxheap及minheap

#include <queue>using namespace std;int main(){    priority_queue<int> maxheap;    priority_queue<int, vector<int>, greater<int> > minheap;    return 0;}

3 . map与图
如果说,2D vector在表示图时可能会因为给出的vertex并不是连续而出现一些不便,那么map的键值对则较为完美的解决了这一问题

// 一个简单示例#include <vector>#include <map>#include <iostream>using namespace std;struct Node {    int data;    Node(int i):data(i) {}};int main(void){    map<int, vector<Node> > mv;    mv[1].push_back(Node(1));       // 插入一个与节点“1”相连的节点的相关信息    mv[1].push_back(Node(2));    for (int i = 0; i < mv[1].size(); i++)        cout<<' ' << mv[1][i].data; // 逐项输出与节点“1”相连的数据    return 0;}

3. 参考资料

  1. C++reference:http://www.cplusplus.com/reference/
原创粉丝点击