C++中提供了许多容器类,包括数组、向量、列表、队列、栈、集合、映射等等。这些容器类具有不同的特性和用途,本文将对C++中常用的容器类进行详细介绍。
1. 数组 (array)
数组是一种在内存中连续存储数据的容器,所有元素的类型相同且大小固定。在C++11中引入了array容器,其具有如下特点:
- 大小固定,创建时即指定数组大小,不支持动态扩容。
- 支持快速随机访问,可以使用下标运算符或迭代器访问元素。
- 支持STL算法和其他容器的大部分操作,如sort、swap、insert等。
以下是array容器常见的操作:
- 定义array容器:
std::array<int, 5> myArr={1,2,3,4,5};
- 访问元素:
myArr[0]
或者myArr.at(0)
- 获取容器大小:
myArr.size()
2. 向量 (vector)
向量是一种动态数组,大小可以动态增加,也可以在任意位置插入或删除元素。向量在实现上使用动态分配的数组来存储元素,并且支持随机访问、快速插入和删除元素,因此是STL中最常用的容器之一。
以下是vector容器常见的操作:
- 定义vector容器:
std::vector<int> myVec={1,2,3,4,5};
- 访问元素:
myVec[0]
或者myVec.at(0)
- 添加元素:
myVec.push_back(6)
(在尾部添加元素) - 删除元素:
myVec.erase(myVec.begin()+1)
(删除第二个元素) - 获取容器大小:
myVec.size()
3. 列表 (list)
列表是一种双向链表,与向量相比,列表支持高效的插入和删除元素,但不支持随机访问。列表实际上是由一系列节点组成的,每个节点都包含一个元素以及指向前后节点的指针。
以下是list容器常见的操作:
- 定义list容器:
std::list<int> myList={1,2,3,4,5};
- 访问元素: 不支持随机访问,需要遍历链表来访问元素。
- 添加元素:
myList.push_back(6)
(在尾部添加元素),myList.insert(myList.begin(), 0)
(在头部添加元素) - 删除元素:
myList.erase(myList.begin()+1)
(删除第二个元素) - 获取容器大小:
myList.size()
4. 队列 (queue)
队列是一种先进先出 (FIFO) 的容器,支持在队尾插入元素、在队头删除元素。队列由两个端点组成,一个是队尾 (back),一个是队头 (front)。
以下是queue容器常见的操作:
- 定义queue容器:
std::queue<int> myQueue;
- 添加元素:
myQueue.push(1)
(在队尾添加元素) - 删除元素:
myQueue.pop()
(删除队头元素) - 获取队头和队尾元素:
myQueue.front()
,myQueue.back()
- 判断队列是否为空:
myQueue.empty()
5. 栈 (stack)
栈是一种后进先出 (LIFO) 的容器,支持在栈顶插入和删除元素。栈实际上是由一系列元素组成的,最后一个加入的元素位于栈顶。
以下是stack容器常见的操作:
- 定义stack容器:
std::stack<int> myStack;
- 添加元素:
myStack.push(1)
(在栈顶添加元素) - 删除元素:
myStack.pop()
(删除栈顶元素) - 获取栈顶元素:
myStack.top()
- 判断栈是否为空:
myStack.empty()
6. 集合 (set)
集合是一种容纳互不相同元素的容器,支持快速的查找、插入和删除元素。集合的元素按照一定的顺序排列,通常是从小到大。
以下是set容器常见的操作:
- 定义set容器:
std::set<int> mySet={1,2,3,4,5};
- 添加元素:
mySet.insert(6)
- 删除元素:
mySet.erase(2)
- 查找元素:
mySet.find(3)
(返回迭代器) - 获取集合大小:
mySet.size()
7. 映射 (map)
映射是一种将键值对 (key-value) 相关联的容器,支持快速的查找、插入和删除元素。映射的键和值可以是任意类型,但每个键只能对应一个值。
以下是map容器常见的操作:
- 定义map容器:
std::map<string, int> myMap={{"A", 1}, {"B", 2}, {"C", 3}};
- 添加键值对:
myMap["D"] = 4
- 删除元素:
myMap.erase("B")
- 查找元素:
myMap.find("C")
(返回迭代器) - 获取映射大小:
myMap.size()