list<int>l1; //创建一个空链表
list<int>l2(10); //创建一个链表其有10个空元素
list<int>l3(5,20); //创建一个链表其有5个元素内容为20
list<int>l4(l3.begin(),l3.end());
//创建一个链表其内容为l3
list<int>l5(l4);
//创建一个链表其内容为l4
list<int>l6.assgin(4,12);
//创建一个有四个值为12的链表
list<int> li={1,2,3,4,5,6};
for(auto it=li.begin();it!=li.end();it++){
cout<<*it<<" ";
}
empty(); //判空
size(); //返回链表元素的个数
max_size(); //返回链表能容纳元素的最大数量
resize(); //改变链表的大小
push_front(); //在链表的最前端插入一个数据
push_back(); //在链表的最尾端插入一个数据
insert();
//插入元素到指定位置,通过在元素之前在指定位置插入新元素来扩展向量,从而有效地增加容器大小所插入的元素数量。
//插入单一数据到指定位置:
iterator insert (iterator position, const value_type& val);
//插入一段数据到指定位置:
void insert (iterator position, size_type n, const value_type& val);
//插入一段别的容器的数据到指定位置:
template <class Inputlterator>
void insert (iterator position, Inputlterator first,Inputlterator last); //要注意,区间的范围是前闭后开
li.insert(li.begin(),100);
//在链表的最前端插入数据100
li.insert(li.begin(),3,200);
//在链表最前端插入3个100
list<int>k(2,50); //创建一个新的链表,拥有2个元素(50)
li.insert(li.begin(),li.end()); //在链表v的最前端插入k的全部元素
案例:
#include
#include
using namespace std;
void Print(list<int> l)
{
for(auto i=l.begin();i!=end();i++)
{
cout<<*i<<endl;
}
cout<<endl;
}
int main()
{
list<int>l={1,2,3,4,5,6};
cout<<l.size()<<endl;
cout<<l.max_size()<<endl;
l.push_front(8);
Print(l);
l.push_back(0);
Print(l);
l.insert(l.begin(),20);
Print(l);
list<int>l1(3,11);
l.insert(++l.begin(),l1.begin(),l1.end());
Print(l);
return 0;
}
pop_front(); //在链表的最前端删除一个数据
pop_back(); //在链表的最后端删除一个数据
erase(); //删除一个元素或者一段区间,将自动缩减空间
clear(); //清空链表
unique(); //删除链表中重复的元素
remove(); //从链表删除元素
l.erase(l.begin()); //删除对应位置的元素
l.erase(l.begin(),l.end()); //删除链表的所有元素
//要注意的是,链表的迭代器不可以进行代数运算
案例:
#include
#include
using namespace std;
void Print(list<int> l)
{
for(auto i=l.begin();i!=l.end();i++)
{
cout<<(*i)<<" ";
}
cout<<endl;
cout<<endl;
}
int main()
{
list<int>l={1,2,3,4,5,6,6};
Print(l);
l.unique(); //或者l.remove(6);
Print(l);
list<int>l1(5,11);
l.insert(++l.begin(),l1.begin(),++l1.begin());
Print(l);
l.erase(l.begin());
Print(l);
l.erase(l.begin(),l.end()); //或者list.clear();
Print(l);
if(!l.empty())
{
cout<<"链表为空"<<endl;
}
return 0;
}
sort();
//让整个链表变成升序,或者自定义排序状态
template<class Compare>
void sort(Compare comp);
reverse(); //让升序链表变成降序
案例:
#include
#include
using namespace std;
void Print(list<int> l)
{
for(auto i=l.begin();i!=l.end();i++)
{
cout<<(*i)<<" ";
}
cout<<endl;
cout<<endl;
}
int cmp(const int &a,const int &b)
{
return a>b; //自定义降序
}
int main()
{
list<int>l;
for(int i=10;i>=6;i--)
{
l.push_back(i);
}
l.push_back(20);
l.push_front(3);
list<int>l2(l);
Print(l);
l.sort();
Print(l);
Print(l2);
l2.sort(cmp); //或者l2.sort(); l2.reverse();
Print(l2);
return 0;
}
back(); //返回第一个元素
front(); //返回最后一个元素
get_allocator(); //返回list的配置器
merge(list& x); //合并两个链表
splice(); //合并两个链表
swap(); //交换链表
//关于splice函数,我发现了一篇很好博客,读者参考这篇博客就可以
链接: [link](链接: link)
begin(); //返回指向第一个元素的迭代器
end(); //返回指向最后一个元素的迭代器
rbegin(); //返回指向第一个元素的逆向迭代器
rend(); //返回指向最后一个元素的逆向迭代器
利用list将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高。排序规则,按照年龄进行升序,如果年龄相同按照身高进行降序。
#include
#include
#include
using namespace std;
class Person
{
public:
Person(string name, int age, int height){
this->m_age = age;
this->m_height = height;
this->m_name = name;
}
int m_age;
int m_height;
string m_name;
};
bool compare(Person& p1, Person& p2)
{
if (p1.m_age == p2.m_age){
return p1.m_height > p2.m_height://年龄相同身高降序
}
else
{
return p1.m_age< p2.m_age;
}
}
int main()
{
list<Person>L;
Person p1("唐僧".35,175);
Person p2("孙悟空".45, 100);
Person Da1("沙悟净",40,170);
L.push_back(p2);
L.push_back(p3);
L.push_back(p4);
cout<<"排序前: "<<endl;
for (auto it = L.begin(); it != L.end(); jt++) //遍历—遍
{
cout <<"姓名:"<<(*it).m_name <<" 年龄:"<<(*it).m_age
<<"身高:"<<(*it).m_height << endl;
}
L.sort(compare);
cout <<"排序后"<<endl;
for (auto it =L.begin(); it !- L.end(); it++){
cout <<"姓名:" <<(*it).m_name <<"年龄:."<<(*it).m_age
<<"身高:" <<(*it).m_height <<endl;
}
return O;
}