C++ 学习之路---list容器

前言

不知不觉到了毕业季,面临着找工作的问题,之前通过C++ Primer Plus系统的学习过C++,但是学过之后很多知识不用就都淡忘了,现在通过做题发现有很多知识需要重新捡起来,对于C++容器中List的实现方式不太了解,特此写此博客。为了学习也为了与别人共勉。

List简介

在C++官网关于List的介绍中,提到:

  1. list容器位于std命名空间,使用需要加std::来声明命名空间使用;
  2. 需要增加#include 头文件
  3. list是底层数据结构是双向链表,相对于顺序存储(数组)而言,链表可以快速的删除和插入,但是在遍历上不占优势。例如如果想得到第5个元素的值,则只能通过已知的一个元素位置(头或尾)一个一个遍历得到。
  4. 与forward_list很相似,不同在于forward_list是单向链表。

容器属性

序列:元素按照严格的线性关系进行存储,每个元素按照其在序列中的位置进行访问。

双向链表:每一个节点都包含三个部分信息,上一个节点的指针、当前节点的值、下一个节点的指针;能对前驱节点进行O(1)时间复杂度的操作,对于查找,删除,插入操作时间复杂度O(n);

内存请求:通过内存分配对象自动的处理内存需求。

成员函数

名称注释
constructor构造函数(公有)
destructor析构函数(公有)
operator=赋值操作(公有)

迭代器 :

名称注释
begin返回迭代器的开头
end返回迭代器的末尾
rbegin返回反转迭代器的开头( = end)
rend返回反转迭代器的末尾( = begin)
cbegin返回const迭代器的开头
cend返回const迭代器的末尾
crbegin返回const反转迭代器的开头
crend返回const反转迭代器的末尾

容量

名称注释
empty若容器为空则返回false
size返回容器元素的个数
max_size返回容器的最大容量

元素访问

名称注释
front返回第一个元素
back返回最后一个元素

修饰语

名称注释
assign将新内容分配给容器
emplace_front在开始时构造插入元素
push_front再开始插入元素
pop_front删除第一个元素
emplace_back在末尾构造并插入元素
push_back在末尾添加元素
pop_back删除末尾元素
emplace构造和插入元素
insert插入元素
erase擦除元素
swap交换内容
resize调整容器大小
clear清除容器内容

操作

名称注释
splice将元素从一个表移到另一个表
remove删除特定元素
remove_if删除满足条件的元素
unique删除重复值
merge合并排序列表
sort对容器中的元素进行排序
reverse反转元素

观察员

get_allocator :获取分配器

重载的非成员函数

名称注释
relational operators (list)list的关系运算符
swap (list)交换两个list容器内容

练习

练习1:

/* 移动0的位置
	给一组数据,写一个函数将数组中的0移到最后,并保持非零元素的先后位置
	example
	Input:[0, 1, 0, 3, 12];
	Output:[1, 3, 12, 0, 0];
	注释:
	1.不能进行拷贝;
	2.要求最少的操作
*/
#include <list>
#include <iostream>
using namespace std;
class Solution {
public:
	void MoveZeros(list<int>& l1)
	{
		if (l1.empty())
			return;
		int size = l1.size();
		l1.remove(0);
		int size1 = l1.size();
		for (int i = size1; i < size; i++)
			l1.push_back(0);
	}
};

练习2:

/*erase练习
	删除指定指定值de元素(delete功能)
*/
void testErase(list<int>& l, int n) //delete all elements equal n
	{
		for (list<int>::iterator it = l.begin(); it != l.end();)
		{
			if (*it == n)
			{
				l.erase(it++);
			}
			else
			{
				it++;	
			}
		}
	}

结语

对list容器有一个初始的认识,对于每一个成员函数的实现还需要进一步的研究。后续会增加相应的成员函数的实现及使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值