导航:
1.list容器的基本概念(功能,组成,优缺点)
2.list 容器的构造函数
3.list 容器的赋值操作
4.list 容器的大小容量
5.list 容器的插入与删除
6.list 容器数据存取
7.list 容器反转和排序
———————————————————————————————————
1.list容器的基本概念
功能:将数据进行链式存储。
链表:是一种物理存储单元非连续的存储结构,数据元素中的逻辑顺序通过指针链表实现。
链表组成:一系列的结点
结点组成:一个是存储数据元素的数据域,另一个是存储下一个结点的地址
STL中链表是一个双向循环列表
优点:对任意位置可以快速添加,删除元素(动态分配,不会造成浪费)。
缺点:遍历没有数组遍历的快,并且占用空间比较大。
链表中存储方式不是连续内存空间,list中迭代器只支持前移后移,属于双向迭代器
插入删除元素不影响迭代器失效,vector不成立(动态分配内存对导致内存改变从而失效)
———————————————————————————————————
2.list 容器的构造函数
list< T >v; //默认构造函数
list(v.begin(),v.end()); //将[ begin(),end())中的拷贝到本身
list(n,elem); //构造函数将n个elem数据拷贝本身
list(const vector &vec); //拷贝构造函数
例子:
#include <iostream>
using namespace std;
#include <list>
void PrintList(const list<int>& L) //遍历list容器
{
for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
{
cout<<(*it)<<" ";
}
cout<<endl;
}
void test()
{
//创建list容器
list<int> L; //默认构造
L.push_back(10);
L.push_back(20);
L.push_back(30);
L.push_back(40);
PrintList(L);
//区间构造
list<int> L1(L.begin(),L.end());
PrintList(L1);
//n个elem
list<int> L2(5,100);
PrintList(L2);
//拷贝构造
list<int> L3(L2);
PrintList(L3);
}
int main()
{
test();
system("pause");
return 0;
}
———————————————————————————————————
3.list 容器的赋值操作
普通赋值 .push_back()
operator= 赋值
assign 区间赋值
assign n个elem赋值
swap() //互换容器
例子:
#include <iostream>
using namespace std;
#include <list>
void PrintList(const list<int>& L) //遍历list容器
{
for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
{
cout<<(*it)<<" ";
}
cout<<endl;
}
void test()
{
list<int> L1;
L1.push_back(10); //尾插
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
PrintList(L1);
list<int> L2;
L2 = L1; //operator= 赋值
PrintList(L2);
list<int> L3;
L3.assign(L2.begin(),L2.end()); //assign 区间
PrintList(L3);
list<int> L4;
L4.assign(5,100); //assign n个elem赋值
PrintList(L4);
}
int main()
{
test();
system("pause");
return 0;
}
———————————————————————————————————
4.list 容器的大小容量
.empty() //判断容器是否为空
.size() //返回容器中的元素个数
.resize(int num) //重新指定容器长度为num,容器变长,则以默认值0填充到新位置;变短超出元素被删
.resize(int num.int elem) //同上,不过多出来的位置填充elem
———————————————————————————————————
5.list 容器的插入与删除
pop,push,insert,erase(用迭代器),remove(elem)(移除所有elem值),clear()
———————————————————————————————————
6.list 容器数据存取
不支持迭代器随机访问
支持递增,递减
front(),back()
例子:
#include <iostream>
using namespace std;
#include <list>
void test()
{
list<int> L1;
L1.push_back(10); //尾插
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
cout<<L1.front()<<endl;
cout<<L1.back()<<endl;
list<int>::iterator it = L1.begin();
it++; //支持递增
cout<<(*it)<<endl;
it--; //支持递减
}
int main()
{
test();
system("pause");
return 0;
}
运行结果:
———————————————————————————————————
7.list 容器反转和排序
反转 reverse()
排序 sort() //升序 sort(compare) //降序,添加一个返回值为bool的函数
例子:
#include <iostream>
using namespace std;
#include <list>
void PrintList(const list<int>&L)
{
for(list<int>::const_iterator it = L.begin();it!=L.end();it++)
{
cout<<(*it)<<" ";
}
cout<<endl;
}
bool compare(int val1,int val2) //写一个返回值为bool类型的函数
{
return val1>val2;
}
//list反转和排序
void test()
{
list<int> L1;
L1.push_back(10); //尾插
L1.push_back(20);
L1.push_back(30);
L1.push_back(40);
//反转前
cout<<"反转前:"<<endl;
PrintList(L1);
L1.reverse(); //反转
cout<<"反转后:"<<endl;
PrintList(L1);
//排序后
//所有不支持随机访问迭代器的容器,不可以用标准算法
//不支持随机访问迭代器的容器,内部会提供对应一些算法
L1.sort(); //可以直接调用
cout<<"排序后:"<<endl;
PrintList(L1);
//进行降序排序
cout<<"进行降序排序:"<<endl;
L1.sort(compare); //将函数名放进去
PrintList(L1);
}
int main()
{
test();
system("pause");
return 0;
}
来源:CSDN
作者:cl939974883
链接:https://blog.csdn.net/cl939974883/article/details/104107427