C++STL库中list容器常用函数大全(对自定义类型进行操作)

本文详细介绍了C++ STL中的list容器,包括构造函数、赋值和交换、大小操作、插入和删除等基本操作,并通过代码示例展示了如何使用list容器。此外,还探讨了list容器的迭代器特性,以及如何进行数据存取、反转和排序。重点讲解了对自定义类型的数据操作,并提供了相关函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:为了文章简洁  本文多采用函数原型加代码示例的方式

本文使用的类源码和对象数据如下:

目录

构造函数

赋值和交换

大小操作

插入和删除

迭代器偏移操作:

数据存取

对自定义类型进行读取

反转和排序


class person
{
public:
	string m_name;
	int m_age;

	person(string name, int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
};


	person p1("孙悟空",199);
	person p2("唐僧", 29);
	person p3("沙僧", 299);
  1. list容器不支持随机访问迭代器  就是说只能对头尾进行访问操作  或者对迭代器进行++ --操作取访问指定位置
  2. 所有不可随机访问的迭代器都不可使用标准算法(如sort) 其内部会提供相关成员函数

        (具体可见 反转与排序)

构造函数

  • list<T> lst1;       //T为任意数据类型
  • list<T> lst2(const list& lst1);       //拷贝构造函数
  • list<T> lst3(lst1.begin() , lst1.end());    //拷贝某链表区间数据
    list<person> lst1;
	list<person> lst2(lst1);
	list<person> lst3(lst1.begin(), lst1.end());

赋值和交换

  • operator=(const list& lst);           //等号运算符重载
  • assign(int n , elem);                   //赋值n个elem
  • swap(lst);                                   //交换链表
 
    person p1("孙悟空",199);

    
    lst1 = lst2;
    lst1.assign(5, p1);
	lst1.assign(lst2.begin(), lst2.end());
	lst1.swap(lst2);

大小操作

  • int size();                                        //判断容器中元素个数
  • bool empty();                                    //判断list容器是否为空     为空返回true
  • resize( int num );                     

                 //预留num个空间   比原来空间大则填充默认值0 自定义类型的所有属性都为0

                //                              比原来空间少则删除最后的元素

  • resize( int num , elem );  //同上 默认填充值为elem
    lst1.size();
	lst1.empty();
	lst1.resize(8);
	lst1.resize(8, p1);

插入和删除

//对两端进行操作

  • void push_back(T);        //将数据存入链表最后
  • void push_front(T);        //将数据存入链表最前
  • void pop_back();            //将链表最后的数据删除
  • void pop_front();            //将链表最前的数据删除
	Li1.push_back(p1);
	Li1.push_front(p2);

	Li1.pop_back();
	Li1.pop_front();

//对其它位置进行操作

  • insert(pos , elem);                //pos为迭代器  表示在pos位置插入元素elem
  • insert(pos , begin , end);     //三个参数都是迭代器   表示在pos处插入[begin,end)元素
  • erase(begin , end);             //删除[begin , end)元素
  • erase( pos );                       //删除pos处位置
  • clear();                                //清空容器数据
  • remove( elem );                  //删除于elem相等的数据

迭代器偏移操作:

list容器迭代器不支持随机访问 只能进行++或--

	lst1.assign(4, p1);
	lst2.assign(4, p2);
	
	lst1.insert(lst1.begin()++, p3);
	lst1.insert(lst1.begin()++, lst2.begin(), lst2.end());
	
	lst1.erase(lst1.begin()++, lst1.end()--);
	lst1.erase(lst1.begin()++);
	lst1.clear();

	lst1.remove(p1);

数据存取

  • front();
  • back();

list迭代器不支持对数据的随机访问 只能访问头尾或对迭代器进行++ --操作

因为链表的数据存储不是连续的空间

对自定义类型进行读取


	cout << lst1.front().m_name << " " << lst1.front().m_age << endl;;
	cout << lst1.back().m_name << " " << lst1.back().m_age << endl;;

反转和排序

  • reverse();        反转
  • sort();              排序
lst1.reverse();

sort(cmp);
bool cmp(person a, person b)
{
    //按年龄从大到小排序
	return a.m_age > b.m_age;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmzzz666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值