本篇学习forward_list的操作
sort:对元素进行排序
merge:合并二个已排序列表
splice_after:从另一 forward_list 移动元素
remove:移除满足特定标准的元素
remove_if:移除满足特定标准的元素
reverse:将该链表的所有元素的顺序反转
unique:删除连续的重复元素
代码实现
#include <iostream>
#include <forward_list>
using namespace std;
bool removeCondtion(const int &value)
{
return (value > 70);
}
void forward_listOperator()
{
//1.sort:对元素进行排序
forward_list<int> list1 = {13, 46, 23, 76, 54};
forward_list<int> list2 = {17, 36, 22, 73, 87};
cout << " list1的值为:";
for(auto &val: list1)
cout << val << "\t";
cout << endl;
list1.sort();
cout << " list1排序后:";
for(auto &val: list1)
cout << val << "\t";
cout << endl;
cout << " list2的值为:";
for(auto &val: list2)
cout << val << "\t";
cout << endl;
list2.sort();
cout << " list2排序后:";
for(auto &val: list2)
cout << val << "\t";
cout << endl;
//2.merge:合并二个已排序列表
list1.merge(list2);//合并后list2的内容为空了
cout << " list1的值为:";
for(auto &val: list1)
cout << val << "\t";
cout << endl;
//3.splice_after:从另一 forward_list 移动元素
forward_list<int> list3 = {62, 39, 56};
auto it1 = list3.begin();//it1指向第一个位置62
cout << " it1的值为:" << *it1 << endl;
list2.assign({21, 22, 23});//list2合并后没有值,这里重新赋值
list3.splice_after(list3.before_begin(), list2);//把list2拼接到list3起始位置,拼接后list2为空
//现在的it1指向的是62,但位置已是第4个位置了
cout << " list3的值为:";
for(auto &val: list3)
cout << val << "\t";
cout << endl;
cout << " list2的值为:";
for(auto &val: list2)
cout << val << "\t";
cout << endl;
//para1:拼接的位置,para2:拼接的容器,para3:起点,para4终点 范围(start, end)不包括start和end两个元素
list2.splice_after(list2.before_begin(), list3, list3.begin(), it1);
cout << " list2的值为:";
for(auto &val: list2)
cout << val << "\t";
cout << endl;
cout << " list3的值为:";
for(auto &val: list3)
cout << val << "\t";
cout << endl;
forward_list<int> list4 = { 1, 2, 3 };
cout << " list4.begin = " << *list4.begin() << endl;
//把list4里的begin之后的一个值拼接到list3头部元素之前的位置
list3.splice_after(list3.before_begin(), list4, ++list4.begin());
cout << " list2的值为:";
for(auto &val: list2)
cout << val << "\t";
cout << endl;
cout << " list3的值为:";
for(auto &val: list3)
cout << val << "\t";
cout << endl;
cout << " list4的值为:";
for(auto &val: list4)
cout << val << "\t";
cout << endl;
//4.remove:移除满足特定标准的元素
forward_list<int> list5 = {23, 43, 87, 20, 79};
cout << " list5的值为:";
for(auto &val: list5)
cout << val << "\t";
cout << endl;
list5.remove(43);
cout << " list5的值为:";
for(auto &val: list5)
cout << val << "\t";
cout << endl;
//5.remove_if:移除满足特定标准的元素
list5.remove_if(removeCondtion);//移除数值大于70的值
cout << " list5的值为:";
for(auto &val: list5)
cout << val << "\t";
cout << endl;
//6.reverse:将该链表的所有元素的顺序反转
forward_list<int> list6 = {10,20,30,40,50,60};
cout << " list6的值为:";
for(auto &val: list6)
cout << val << "\t";
cout << endl;
list6.reverse();
cout << " list6反转后:";
for(auto &val: list6)
cout << val << "\t";
cout << endl;
//7.unique:删除连续的重复元素
forward_list<int> list7 = {1, 2, 3, 4,4, 5, 6, 4, 7, 4, 8};
cout << " list7的值为:";
for(auto &val: list7)
cout << val << "\t";
cout << endl;
list7.unique();
cout << " list7删除重复元素后:";
for(auto &val: list7)
cout << val << "\t";
cout << endl;
}
int main()
{
forward_listOperator();
cout << endl;
cout << " Hello World!" << endl;
return 0;
}
运行结果:
merge合并后,第二个list的内容就为空了。
splice_after拼接后,第二个list里的拼接元素被清空了。
参考:
https://zh.cppreference.com/w/cpp/container/forward_list
http://www.cplusplus.com/reference/forward_list/forward_list/