📅  最后修改于: 2023-12-03 15:13:56.329000             🧑  作者: Mango
在C++ STL中,forward_list
是一个单链表容器,在其前身list
的基础上,通过使用单向链表来减少内存占用和提高插入删除操作的效率。forward_list
提供了丰富的成员函数,其中unique()
函数可以用于去除连续重复元素。
以下是forward_list::unique()
函数的语法:
void unique();
unique()
函数会将forward_list
中连续重复的元素去除,只保留一个。
无参数。
以下是forward_list::unique()
函数的简单实现过程:
void unique() {
auto node = m_head->next;
while (node != nullptr && node->next != nullptr) {
if (node->data == node->next->data) {
auto tmp = node->next;
node->next = tmp->next;
delete tmp;
} else {
node = node->next;
}
}
}
该函数使用了迭代器的思想,通过遍历链表并比较相邻节点的值,来判断是否需要删除重复节点。在需要删除节点时,将指向下一个节点的指针改变后再释放该节点的空间,避免了使用remove()
函数的额外内存开销。值得注意的是,该函数只会删除相邻重复的元素,若要删除不相邻重复的元素,则需要使用remove()
函数。
以下示例展示了使用forward_list::unique()
函数去除重复元素的过程:
#include <iostream>
#include <forward_list>
using namespace std;
int main() {
forward_list<int> l = {1, 2, 2, 3, 4, 4, 4, 5};
cout << "before unique: ";
for (auto i : l) {
cout << i << " "; // 1 2 2 3 4 4 4 5
}
l.unique();
cout << "\nafter unique: ";
for (auto i : l) {
cout << i << " "; // 1 2 3 4 5
}
return 0;
}
在该示例中,先初始化了一个带有重复元素的forward_list
,再使用unique()
函数去除重复元素,并输出结果。
forward_list::unique()
函数提供了一种简单快捷的去除重复元素的方法,对于链表中存在许多连续重复元素的情况尤为适用。然而,其只能去除相邻节点的重复元素,若要去除不相邻节点的重复元素,则需要使用其他函数或自定义实现。