导航菜单

C++编程/STL标准库
课程进度 69% · 第13/18章13/18章 · 标签 1/3
1

顺序容器

包括 vector、list、deque 等顺序存储的容器。

cpp
1
#include <vector>
2
#include <list>
3
#include <deque>
4
using namespace std;
5
 
6
int main() {
7
// vector示例
8
vector<int> vec = {1, 2, 3, 4, 5};
9
vec.push_back(6); // 在末尾添加元素
10
vec.pop_back(); // 删除末尾元素
11
cout << vec.front() << endl; // 访问第一个元素
12
cout << vec.back() << endl; // 访问最后一个元素
13
 
14
// list示例(双向链表)
15
list<string> lst = {"C++", "Java", "Python"};
16
lst.push_front("Rust"); // 在开头添加元素
17
lst.push_back("Go"); // 在末尾添加元素
18
 
19
// deque示例(双端队列)
20
deque<double> dq;
21
dq.push_front(1.1); // 在开头添加元素
22
dq.push_back(2.2); // 在末尾添加元素
23
 
24
// 使用迭代器遍历
25
for(const auto& item : vec) {
26
cout << item << " ";
27
}
28
cout << endl;
29
 
30
// 使用迭代器修改元素
31
for(auto it = lst.begin(); it != lst.end(); ++it) {
32
cout << *it << " ";
33
}
34
cout << endl;
35
}
2

关联容器

包括 set、map、multiset、multimap 等基于键值对的容器。

cpp
1
#include <map>
2
#include <set>
3
using namespace std;
4
 
5
int main() {
6
// map示例(键值对容器)
7
map<string, int> scores;
8
scores["Alice"] = 95;
9
scores["Bob"] = 89;
10
scores["Charlie"] = 92;
11
 
12
// 检查键是否存在
13
if(scores.find("Alice") != scores.end()) {
14
cout << "Alice's score: " << scores["Alice"] << endl;
15
}
16
 
17
// 遍历map
18
for(const auto& [name, score] : scores) {
19
cout << name << ": " << score << endl;
20
}
21
 
22
// set示例(有序集合)
23
set<int> numbers = {3, 1, 4, 1, 5, 9, 2, 6, 5}; // 自动去重和排序
24
numbers.insert(7);
25
 
26
// 检查元素是否存在
27
if(numbers.count(5) > 0) {
28
cout << "5 exists in the set" << endl;
29
}
30
 
31
// multimap示例(允许重复键)
32
multimap<string, string> dictionary;
33
dictionary.insert({"apple", "一种水果"});
34
dictionary.insert({"apple", "一个科技公司"});
35
 
36
// 查找所有相同键的值
37
auto range = dictionary.equal_range("apple");
38
for(auto it = range.first; it != range.second; ++it) {
39
cout << it->first << ": " << it->second << endl;
40
}
41
}

📖顺序容器适合按位置访问和修改元素,关联容器适合需要快速查找的场景。所有容器都支持迭代器操作