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

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

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

目录

构造函数

赋值和交换

大小操作

插入和删除

迭代器偏移操作:

数据存取

对自定义类型进行读取

反转和排序


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;
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用vector时,有一些常用函数可以帮助我们操作和获取vector的元素。其中包括以下几个函数: 1. vector::begin():返回一个指向vector第一个元素的迭代器。 2. vector::end():返回一个指向vector最后一个元素之后位置的迭代器。 3. vector::front():返回vector的第一个元素。 4. vector::back():返回vector的最后一个元素。 这些函数可以方便地获取vector的首尾元素或者迭代器。另外,还有一个常用的构造函数是vector(const vector &from),它可以用来构造一个与另一个vector相同的vector对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++ Vector常用函数](https://blog.csdn.net/qq_40243430/article/details/103426978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vector容器 常用函数](https://blog.csdn.net/xiaojinger_123/article/details/126701687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zmzzz666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值