📅  最后修改于: 2023-12-03 15:14:03.404000             🧑  作者: Mango
C++标准模板库(STL)中提供了许多容器类,包括向量(vector)、列表(list)、映射(map)等。前向列表(forward_list)是一个单项列表,它比标准的列表更加轻便、省空间。无序映射列表(unordered_map)是一个关联容器,它提供了键值对的存储及快速查找功能。
前向列表是一种单向列表,每个节点只保存下一个节点的地址,相对于标准的列表,前向列表更加轻便、省空间。前向列表中的元素不能直接访问,需要通过迭代器遍历整个列表。前向列表的基本操作包括插入元素、删除元素、访问元素和遍历元素等。
#include <forward_list>
#include <iostream>
using namespace std;
int main() {
forward_list<int> mylist; // 创建前向列表
mylist.push_front(1); // 在列表头部插入元素1
mylist.push_front(2); // 在列表头部插入元素2
mylist.push_front(3); // 在列表头部插入元素3
cout << "前向列表的元素:" << endl;
for (auto it = mylist.begin(); it != mylist.end(); it++) {
cout << *it << " ";
}
return 0;
}
输出结果:
前向列表的元素:
3 2 1
使用 insert_after()
函数可以向前向列表中插入一个元素,在指定节点之后插入。
#include <forward_list>
#include <iostream>
using namespace std;
int main() {
forward_list<int> mylist; // 创建前向列表
auto it = mylist.before_begin(); // 获取第一个节点之前的位置
mylist.insert_after(it, 1); // 在第一个节点之后插入元素1
mylist.insert_after(it, 2); // 在第一个节点之后插入元素2
mylist.insert_after(it, 3); // 在第一个节点之后插入元素3
cout << "前向列表的元素:" << endl;
for (auto it = mylist.begin(); it != mylist.end(); it++) {
cout << *it << " ";
}
return 0;
}
输出结果:
前向列表的元素:
3 2 1
使用 erase_after()
函数可以删除前向列表中的一个元素,在指定节点之后删除。
#include <forward_list>
#include <iostream>
using namespace std;
int main() {
forward_list<int> mylist; // 创建前向列表
auto it = mylist.before_begin(); // 获取第一个节点之前的位置
mylist.insert_after(it, 1); // 在第一个节点之后插入元素1
mylist.insert_after(it, 2); // 在第一个节点之后插入元素2
mylist.insert_after(it, 3); // 在第一个节点之后插入元素3
mylist.erase_after(it); // 删除第一个节点之后的元素
cout << "前向列表的元素:" << endl;
for (auto it = mylist.begin(); it != mylist.end(); it++) {
cout << *it << " ";
}
return 0;
}
输出结果:
前向列表的元素:
2 1
无序映射列表是一个关联容器,它提供了键值对的存储及快速查找功能。无序映射列表的元素以键值对的形式出现,每个键值对包括一个键和一个值,键和值都可以是任意类型的。
使用 unordered_map
类模板可以创建一个无序映射列表,模板参数分别为键类型和值类型。
#include <unordered_map>
#include <iostream>
using namespace std;
int main() {
unordered_map<int, string> mymap; // 创建无序映射列表
mymap[1] = "one"; // 添加键值对
mymap[2] = "two";
mymap[3] = "three";
cout << "无序映射列表的元素:" << endl;
for (auto it = mymap.begin(); it != mymap.end(); it++) {
cout << it->first << ":" << it->second << endl;
}
return 0;
}
输出结果:
无序映射列表的元素:
3:three
1:one
2:two
使用 insert()
函数可以向无序映射列表中插入一个元素。
#include <unordered_map>
#include <iostream>
using namespace std;
int main() {
unordered_map<int, string> mymap; // 创建无序映射列表
mymap.insert(make_pair(1, "one")); // 添加键值对
mymap.insert(make_pair(2, "two"));
mymap.insert(make_pair(3, "three"));
cout << "无序映射列表的元素:" << endl;
for (auto it = mymap.begin(); it != mymap.end(); it++) {
cout << it->first << ":" << it->second << endl;
}
return 0;
}
输出结果:
无序映射列表的元素:
3:three
1:one
2:two
使用 erase()
函数可以删除无序映射列表中的一个元素,需要指定键值。
#include <unordered_map>
#include <iostream>
using namespace std;
int main() {
unordered_map<int, string> mymap; // 创建无序映射列表
mymap.insert(make_pair(1, "one")); // 添加键值对
mymap.insert(make_pair(2, "two"));
mymap.insert(make_pair(3, "three"));
mymap.erase(2); // 删除键为2的元素
cout << "无序映射列表的元素:" << endl;
for (auto it = mymap.begin(); it != mymap.end(); it++) {
cout << it->first << ":" << it->second << endl;
}
return 0;
}
输出结果:
无序映射列表的元素:
3:three
1:one