C++语言——容器
C++的容器是用于存储和管理数据的数据结构。标准C++库(STL)提供了几种常用的容器类型,包括顺序容器和关联容器。这些容器提供了不同的功能和性能特点,可以根据需求选择合适的容器类型。
下面详细介绍C++的几种常用容器,并给出相应的示例:
- 顺序容器:
- std::vector: 动态数组,支持随机访问和动态大小调整。
- std::list: 双向链表,支持快速插入和删除操作。
- std::deque: 双端队列,类似于动态数组,但在两端都可以高效地添加和删除元素。
- std::array: 固定大小的数组,大小在编译时确定,不支持动态大小调整。
- std::forward_list: 单向链表,支持快速插入和删除操作,但不支持逆向遍历。
示例:使用std::vector和std::list容器分别存储整数,并进行插入、删除和遍历操作。
#include <iostream>
#include <vector>
#include <list>
int main() {
std::vector<int> vec = {
1, 2, 3, 4, 5};
std::list<int> lst = {
10, 20, 30, 40, 50};
// 向容器中插入元素
vec.push_back(6);
lst.push_front(0);
// 从容器中删除元素
vec.pop_back();
lst.pop_back();
// 遍历容器并输出元素
std::cout << "Vector elements: ";
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::cout << "List elements: ";
for (int num : lst) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出结果:
Vector elements: 1 2 3 4 5
List elements: 0 10 20 30 40
- 关联容器:
- std::set: 有序集合,不允许重复元素。
- std::map: 有序键值对集合,键不允许重复。
- std::multiset: 有序集合,允许重复元素。
- std::multimap: 有序键值对集合,允许重复键。
示例:使用std::set和std::map容器存储字符串,并演示插入、查找和遍历操作。
#include <iostream>
#include <set>
#include <map>
int main() {
std::set<std::string> names;
names.insert("Alice");
names.insert("Bob");
names.insert("Charlie");
names.insert("Alice"); // 重复元素将被忽略
std::map<int, std::string> ages;
ages[25] = "Alice";
ages[30] = "Bob";
ages[22] = "Charlie";
ages[25] = "David"; // 重复键将覆盖原有的值
// 查找元素
if (names.find("Alice") != names.end()) {
std::cout << "Alice is in the set." << std::endl;
} else {
std::cout << "Alice is not in the set." << std::endl;
}
// 遍历容器并输出元素
std::cout << "Names: ";
for (const std::string& name : names) {
std::cout << name << " ";
}
std::cout << std::endl;
std::cout << "Ages: ";
for (const auto& entry : ages) {
std::cout << "Name: " << entry.second << ", Age: " << entry.first << " ";
}
std::cout << std::endl;
return 0;
}
输出结果:
Alice is in the set.
Names: Alice Bob Charlie
Ages: Name: David, Age: 25 Name: Bob, Age: 30 Name: Charlie, Age: 22
容器提供了灵活的数据存储和处理方式,可根据需求选择最合适的容器类型。