文章目录
- 1. vector
- 2. deque
- 3. list
- 4. set
- 5. map
C++ STL(Standard Template Library)提供了多种容器类,分别用于存储不同类型的数据,满足不同的操作需求。下面介绍 STL 中常用的几种容器及它们的主要操作。
1. vector
vector 是 C++ STL 中最常用的动态数组类型,可以存储任意类型的对象。vector 通过数组实现,并且支持自动扩展大小以容纳新元素。vector 的主要操作包括:
push_back(elem)
:将元素添加到 vector 的末尾。pop_back()
:从 vector 的末尾删除一个元素。size()
:返回 vector 中元素的个数。clear()
:清空 vector 中所有元素。insert(pos, elem)
:在指定位置插入一个元素。erase(pos)
:从 vector 中删除指定位置的元素。front()
:返回 vector 的第一个元素。back()
:返回 vector 的最后一个元素。
下面是 vector 的一个例子:
#include <iostream>
#include <vector>using namespace std;int main() {vector<int> vec; // 声明一个 int 类型的 vectorvec.push_back(1); // 添加元素vec.push_back(2);vec.push_back(3);cout << "vector size: " << vec.size() << endl; // 输出元素个数for (int i = 0; i < vec.size(); ++i) { // 遍历输出元素值cout << vec[i] << " ";}cout << endl;vec.pop_back(); // 删除最后一个元素vector<int>::iterator it; // 声明一个迭代器for (it = vec.begin(); it != vec.end(); ++it) { // 通过迭代器遍历 vector 容器cout << *it << " ";}cout << endl;return 0;
}
2. deque
deque(双端队列)是一种 STL 中的顺序容器,与 vector 类似,也是用数组实现的。deque 支持高效地在队列头部和尾部添加或删除元素,并且支持随机访问。deque 主要操作包括:
push_front(elem)
:将元素添加到 deque 的前面。pop_front()
:从 deque 的前面删除一个元素。push_back(elem)
:将元素添加到 deque 的末尾。pop_back()
:从 deque 的末尾删除一个元素。size()
:返回 deque 中元素的个数。clear()
:清空 deque 中所有元素。insert(pos, elem)
:在指定位置插入一个元素。erase(pos)
:从 deque 中删除指定位置的元素。front()
:返回 deque 的第一个元素。back()
:返回 deque 的最后一个元素。
下面是 deque 的一个例子:
#include <iostream>
#include <deque>using namespace std;int main() {deque<int> dq; // 声明一个 int 类型的 dequedq.push_back(1); // 添加元素dq.push_front(2);dq.push_back(3);cout << "deque size: " << dq.size() << endl; // 输出元素个数for (int i = 0; i < dq.size(); ++i) { // 遍历输出元素值cout << dq[i] << " ";}cout << endl;dq.pop_front(); // 删除第一个元素deque<int>::iterator it; // 声明一个迭代器for (it = dq.begin(); it != dq.end(); ++it) { // 通过迭代器遍历 deque 容器cout << *it << " ";}cout << endl;return 0;
}
3. list
list(链表)是一种 STL 中的顺序容器,它使用链表实现。list 支持高效地在链表头部、尾部或任意位置添加或删除元素,并且支持双向迭代器进行遍历和访问。list 主要操作包括:
push_front(elem)
:将元素添加到 list 的前面。pop_front()
:从 list 的前面删除一个元素。push_back(elem)
:将元素添加到 list 的末尾。pop_back()
:从 list 的末尾删除一个元素。size()
:返回 list 中元素的个数。clear()
:清空 list 中所有元素。insert(pos, elem)
:在指定位置插入一个元素。erase(pos)
:从 list 中删除指定位置的元素。front()
:返回 list 的第一个元素。back()
:返回 list 的最后一个元素。
下面是 list 的一个例子:
#include <iostream>
#include <list>using namespace std;int main() {list<int> li; // 声明一个 int 类型的 listli.push_back(1); // 添加元素li.push_front(2);li.push_back(3);cout << "list size: " << li.size() << endl; // 输出元素个数list<int>::iterator it; // 声明一个迭代器for (it = li.begin(); it != li.end(); ++it) { // 通过迭代器遍历 list 容器cout << *it << " ";}cout << endl;li.pop_front(); // 删除第一个元素li.insert(li.begin(), 4); // 在开头插入元素li.erase(--li.end()); // 删除最后一个元素for (int elem : li) { // 遍历输出元素值cout << elem << " ";}cout << endl;return 0;
}
4. set
set 是一种 STL 中的关联容器,它存储有序且独一无二的元素集合。set 使用红黑树实现,因此支持高效查找和插入操作。set 主要操作包括:
insert(elem)
:将元素插入 set 中。erase(key)
:从 set 中删除指定元素。clear()
:清空 set 中所有元素。find(key)
:查找是否存在指定元素。size()
:返回 set 中元素的个数。empty()
:判断 set 是否为空。
下面是 set 的一个例子:
#include <iostream>
#include <set>using namespace std;int main() {set<int> st; // 声明一个 int 类型的 setst.insert(3); // 插入元素st.insert(1);st.insert(4);st.insert(2);cout << "set size: " << st.size() << endl; // 输出元素个数set<int>::iterator it; // 声明一个迭代器for (it = st.begin(); it != st.end(); ++it) { // 通过迭代器遍历 set 容器cout << *it << " ";}cout << endl;st.erase(4); // 删除元素if (!st.empty()) { // 判断 set 是否为空it = st.find(2); // 查找元素if (it != st.end()) {cout << "found!" << endl;}}st.clear(); // 清空 set 中的所有元素return 0;
}
5. map
map 是一种 STL 中的关联容器,它存储由键值对组成的有序映射。map 使用红黑树实现,因此支持高效查找和插入操作。map 主要操作包括:
insert(pair)
:将键值对插入 map 中。erase(key)
:从 map 中删除指定键的值。clear()
:清空 map 中所有元素。find(key)
:查找是否存在指定键。count(key)
:返回指定键的元素个数。size()
:返回 map 中键值对的个数。empty()
:判断 map 是否为空。
下面是 map 的一个例子:
#include <iostream>
#include <map>using namespace std;int main() {map<string, int> mp; // 声明一个 string 和 int 类型的 mapmp.insert({"hello", 1}); // 插入键值对mp.insert({"world", 2});mp.insert({"good", 3});mp.insert({"bye", 4});cout << "map size: " << mp.size() << endl; // 输出元素个数map<string, int>::iterator it; // 声明一个迭代器for (it = mp.begin(); it != mp.end(); ++it) { // 通过迭代器遍历 map 容器cout << it->first << ":" << it->second << " ";}cout << endl;mp.erase("good"); // 删除元素if (!mp.empty()) { // 判断 map 是否为空it = mp.find("hello"); // 查找元素if (it != mp.end()) {cout << "found: " << it->second << endl;}}cout << "bye count: " << mp.count("bye") << endl; // 输出指定键的元素个数mp.clear(); // 清空 map 中的所有元素return 0;
}