std::forward_list:
std::forward_list
是 C++ 标准库中的一个单向链表容器。与 std::list
相比,std::forward_list
只允许单向遍历,即只能从前往后访问元素。它的实现比 std::list
更轻量,因此在内存和性能方面通常更优,但缺少双向访问的能力。
特性
- 单向链表 :
std::forward_list
只包含指向下一个元素的指针,不包含指向前一个元素的指针。 - 非随机访问 : 与
std::list
相同,不支持通过下标访问元素。 - 动态大小: 容器大小可以动态调整。
- 稳定的迭代器: 除了被删除的迭代器,其余迭代器在插入和删除操作后保持有效。
常用操作
1. 创建和初始化
cpp
#include <forward_list>
#include <iostream>
int main() {
// 创建一个空的 forward_list
std::forward_list<int> fwd_lst1;
// 创建一个初始化为 5 个元素的 forward_list,元素值为 10
std::forward_list<int> fwd_lst2(5, 10);
// 使用初始化列表创建 forward_list
std::forward_list<int> fwd_lst3 = {1, 2, 3, 4, 5};
return 0;
}
2. 访问和修改元素
cpp
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> fwd_lst = {1, 2, 3, 4, 5};
// 使用迭代器遍历 forward_list
for (auto it = fwd_lst.begin(); it != fwd_lst.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 修改元素
auto it = fwd_lst.begin();
++it; // 移动到第二个元素
*it = 20;
std::cout << "Modified list: ";
for (const auto& elem : fwd_lst) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
3. 添加和删除元素:
cpp
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> fwd_lst = {1, 2, 3, 4, 5};
// 在前面添加元素
fwd_lst.push_front(0);
// 删除前面元素
fwd_lst.pop_front();
std::cout << "List after push and pop operations: ";
for (const auto& elem : fwd_lst) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
4. 插入和删除指定位置的元素
cpp
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> fwd_lst = {1, 2, 3, 4, 5};
// 插入元素
auto it = fwd_lst.before_begin(); // 指向第一个元素的前面
fwd_lst.insert_after(it, 10); // 在第一个元素前插入 10
// 删除指定位置的元素
it = fwd_lst.begin();
fwd_lst.erase_after(it); // 删除第一个元素
std::cout << "List after insert and erase operations: ";
for (const auto& elem : fwd_lst) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
5. 其他常用方法
size()
: 返回forward_list
中元素的数量。empty()
: 判断forward_list
是否为空。clear()
: 清空forward_list
中的所有元素。front()
: 访问forward_list
的第一个元素。resize()
: 不适用于forward_list
,因为不支持随机访问。