#include <iostream>
#include <forward_list>
using namespace std;
//遍历子函数
void print_forward_list(forward_list<int>& v)
{
for(forward_list<int>::iterator it = v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
}
//排序子函数
bool myCompare(int v1,int v2)
{
//降序:让第一个数>第二个数
return v1 > v2;
}
int main()
{
/*构造函数*/
//构造函数
forward_list<int> l1 = {24,15,36,56,89,98};
//遍历链表l1
print_forward_list(l1);
//从头到位复制l1
forward_list<int> l2(l1.begin(),l1.end());
//遍历链表l2
print_forward_list(l2);
//初始化10个120
forward_list<int> l3(10,120);
print_forward_list(l3);//l3遍历
//初始化复制l3
forward_list<int> l4(l3);
print_forward_list(l4);
/*赋值和交换*/
//将begin,ned区间中的数据拷贝赋值
l4.assign(l1.begin(),l1.end());
print_forward_list(l4);
//将10个119拷贝赋值给本身
l4.assign(10,119);
print_forward_list(l4);
//拷贝赋值l3
l4 = l3;
print_forward_list(l4);
//将l2与本身的元素交换
l4.swap(l2);
print_forward_list(l4);
print_forward_list(l2);
/*大小操作*/
//返回容器中元素的个数
cout<<"distance:"<<distance(l4.begin(),l4.end())<<endl;
//empty();//判断容器是否为空
//重新指定容器的长度为num,若容器变长,则以默认值0填充新位置;若容器变短,则末尾超出容器长度的元素被删除。
l4.resize(15);
print_forward_list(l4);
//重新指定容器的长度为num,若容器变长,则以elem值填充新位置;若容器变短,则末尾超出容器长度的元素被删除。
l2.resize(3);
print_forward_list(l2);
/*插入和删除*/
//在容器头部插入一个元素
l2.push_front(250);
print_forward_list(l2);
//删除头部第一个元素
l2.pop_front();
print_forward_list(l2);
//在pos位置插入一个elem元素的拷贝,返回新数据的位置
l2.insert_after(l2.begin(),330);
print_forward_list(l2);
//在pos位置插入n个elem数据,无返回值
l2.insert_after(l2.begin(),3,440);
print_forward_list(l2);
//在pos位置插入[beg,end]区间的数据,无返回值
l2.insert_after(l2.begin(),l1.begin(),l1.end());
print_forward_list(l2);
#if 0
//清空容器的所有数据
l3.clear();
print_forward_list(l3);
//删除[beg,end)区间的数据,返回下一个数据的位置
l3.erase_after(l3.begin(),l3.end());
print_forward_list(l3);
//删除pos位置的数据,返回下一个数据的位置
l3.erase_after(l3.begin());
//删除容器中所有与elem值匹配的元素
#endif
l2.remove(440);
print_forward_list(l2);
/*数据存取*/
//返回第一个元素
cout<<"l2.front:"<<l2.front()<<endl;
/*反转和排序*/
//反转链表
l2.reverse();
print_forward_list(l2);
//链表排序
l2.sort();
print_forward_list(l2);
l2.sort(myCompare);//这里需要注意
print_forward_list(l2);
return 0;
}