【C++】list的认识与使用
创始人
2024-12-01 10:06:13
0

​​

list的认识与使用

  • list的介绍
  • list的使用
    • Member functions(成员函数)
      • constuctor(构造函数)
      • destructor(析构函数)
      • operator=(赋值构造)
    • Iterators(迭代器)
      • begin
      • end
      • rbegin
      • rend
    • Capacity(容量)
      • empty
      • size
      • max_size
    • Element access(元素访问)
      • front
      • back
    • Modifiers(修饰符)
      • assign
      • push_front
      • pop_front
      • push_back
      • pop_back
      • insert
      • erase
      • swap
      • resize
      • clear
    • Operations(操作)
      • reverse
      • sort
    • Non-member function overloads(非成员函数重载)
      • relational operators (list)
      • swap (list)

list的介绍

​​在这里插入图片描述

  • std::list
  • template < class T, class Alloc = allocator > class list;

1.list是可以在常数范围内可以在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。

2.list的底层是双向链表结构,双向链表中的每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。

3.list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,比起更加简单高效。

4.与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入,移除元素的执行效率更好。

5.与其他的序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;list还需要一些额外的空间,以保存每个节点的相关联信息(对于存储类型较小元素的大list来说这可能是一个重要的因素)。

在这里插入图片描述

list的使用

Member functions(成员函数)

constuctor(构造函数)

在这里插入图片描述

  • std::list::list
  • 构造链表
  • default (1)
    explicit list (const allocator_type& alloc = allocator_type());
    空容器构造函数(默认构造函数)
	list lt1; 
  • fill (2)
    explicit list (size_type n, const value_type& val = value_type(),
    const allocator_type& alloc = allocator_type());
    多参数构造函数
	list lt2(4, 100); 
  • range (3)
    template < class InputIterator >
    list (InputIterator first, InputIterator last,
    const allocator_type& alloc = allocator_type());
    范围构造函数
	list lt3(lt2.begin(), lt2.end()); 
  • copy (4)
    list (const list& x);
    拷贝构造函数
	list lt4(lt3); 

destructor(析构函数)

在这里插入图片描述

  • std::list::~list
  • ~list();
  • list的析构函数

operator=(赋值构造)

在这里插入图片描述

  • std::list::operator=

  • copy (1)
    list& operator= (const list& x);

  • 分配内容

	list lt1; 	list lt2(4, 100);  	lt1 = lt2; 

Iterators(迭代器)

begin

在这里插入图片描述

  • std::list::begin

  • iterator begin();

  • const_iterator begin() const;

  • 返回指向开始的迭代器

end

在这里插入图片描述

  • std::list::end
  • iterator end();
  • const_iterator end() const;
  • 返回指向结尾的迭代器
	list lt(4, 100); 	list::iterator it = lt.begin(); 	while (it != lt.end()) 	{ 		cout << *it << " "; 		++it; 	} 	cout << endl; 

rbegin

  • std::list::rbegin
  • reverse_iterator rbegin();
  • const_reverse_iterator rbegin() const;
  • 返回指向反向开始的反向迭代器

rend

在这里插入图片描述

  • std::list::rend
  • reverse_iterator rend();
  • const_reverse_iterator rend() const;
  • 返回指向反向结尾的反向迭代器
	list lt(4, 100); 	list::iterator it = lt.end(); 	while (it != lt.begin()) 	{ 		cout << *it << " "; 		--it; 	} 	cout << endl; 

在这里插入图片描述

【注意】
1.begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动。
2.rbegin(end)与rend(begin)为反向迭代器,对迭代器执行++操作,迭代器向前移动。

Capacity(容量)

empty

在这里插入图片描述

  • std::list::empty
  • bool empty() const;
  • 检测容器是否为空
	list lt(2, 5); 	cout << lt.empty() << endl; 

size

在这里插入图片描述

  • std::list::size
  • size_type size() const;
  • 返回list中有效节点的个数
	list lt(2, 5); 	cout << lt.size() << endl; 

max_size

在这里插入图片描述

  • std::list::max_size
  • size_type max_size() const;
  • 返回容器最大字节
	list lt; 	cout << lt.max_size() << endl; 

Element access(元素访问)

front

在这里插入图片描述

  • std::list::front
  • reference front();
  • const_reference front() const;
  • 返回list的第一个节点中值的引用
	list lt(5, 20); 	cout << lt.front() << endl; 

back

在这里插入图片描述

  • std::list::back
  • reference back();
  • const_reference back() const;
  • 返回list的最后一个节点中值的引用
	list lt(5, 20); 	cout << lt.back() << endl; 

Modifiers(修饰符)

assign

在这里插入图片描述

  • std::list::assign
  • range (1)
    template < class InputIterator >
    void assign (InputIterator first, InputIterator last);
  • fill (2)
    void assign (size_type n, const value_type& val);
  • 分配新的内容给容器
	list lt1; 	list lt2;  	lt1.assign(4, 12); 	lt2.assign(lt1.begin(), lt1.end()); 

push_front

在这里插入图片描述

  • std::list::push_front
  • void push_front (const value_type& val);
  • 在list首元素前插入值为val的元素
	list lt1; 	lt1.assign(4, 12); 	lt1.push_front(1); 	for (auto t : lt1) 	{ 		cout << t << " "; 	} 	cout << endl; 

pop_front

在这里插入图片描述

  • std::list::pop_front
  • void pop_front();
  • 删除list中第一个元素
	list lt1; 	lt1.assign(4, 12); 	lt1.pop_back(); 	for (auto t : lt1) 	{ 		cout << t << " "; 	} 	cout << endl; 

push_back

在这里插入图片描述

  • std::list::push_back
  • void push_back (const value_type& val);
  • 在list尾部插入值为val的元素
	list lt1; 	lt1.assign(4, 12); 	lt1.push_back(1); 	for (auto t : lt1) 	{ 		cout << t << " "; 	} 	cout << endl; 

pop_back

在这里插入图片描述

  • std::list::pop_front
  • void pop_front();
  • 删除list中最后一个元素
	list lt1; 	lt1.assign(4, 12); 	lt1.pop_front(); 	for (auto t : lt1) 	{ 		cout << t << " "; 	} 	cout << endl; 

insert

在这里插入图片描述

  • std::list::insert
  • single element (1)
    iterator insert (iterator position, const value_type& val);
  • fill (2)
    void insert (iterator position, size_type n, const value_type& val);
  • range (3)
    template < class InputIterator>
    void insert (iterator position, InputIterator first, InputIterator last);
  • 在list position位置插入值为val的元素
	list lt1; 	lt1.push_back(1); 	lt1.push_back(2); 	lt1.push_back(3); 	lt1.push_back(4); 	list::iterator it = lt1.begin(); 	++it; 	lt1.insert(it, 19); 

erase

在这里插入图片描述

  • std::list::erase
  • iterator erase (iterator position);
  • iterator erase (iterator first, iterator last);
  • 删除list position位置中插入值为val的元素
	list lt1; 	lt1.push_back(1); 	lt1.push_back(2); 	lt1.push_back(3); 	lt1.push_back(4); 	list::iterator it = lt1.begin(); 	++it; 	lt1.erase(it); 

swap

在这里插入图片描述

  • std::list::swap
  • void swap (list& x);
  • 交换list中的有效元素
	list lt1(3, 5); 	list lt2(4, 2); 	lt1.swap(lt2) 

resize

在这里插入图片描述

  • std::list::resize
  • void resize (size_type n, value_type val = value_type());
  • 改变大小
	list lt1(3, 5); 	lt1.resize(10, 1); 

clear

在这里插入图片描述

  • std::list::clear
  • void clear();
  • 清空list中的有效元素
	list lt1(3, 5); 	lt1.clear(); 

Operations(操作)

reverse

在这里插入图片描述

  • std::list::reverse
  • void reverse();
  • 翻转列表
	list lt1; 	lt1.push_back(1); 	lt1.push_back(2); 	lt1.push_back(3); 	lt1.push_back(4); 	lt1.reverse(); 	for (auto t : lt1) 	{ 		cout << t << " "; 	} 	cout << endl; 

sort

在这里插入图片描述

  • std::list::sort
  • (1) void sort();
  • (2) template < class Compare >
    void sort (Compare comp);
  • 排序
	list lt1; 	lt1.push_back(2); 	lt1.push_back(3); 	lt1.push_back(1); 	lt1.push_back(4); 	lt1.sort(); 	for (auto t : lt1) 	{ 		cout << t << " "; 	} 	cout << endl; 

Non-member function overloads(非成员函数重载)

relational operators (list)

在这里插入图片描述

swap (list)

在这里插入图片描述

相关内容

热门资讯

科普!微信金花房卡充值购买,微... 微信游戏中心:牛牛房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”...
秒懂教程“正版金花房卡批发渠道... 新九哥牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
正规平台有哪些,金花房卡专卖店... 正规平台有哪些,金花房卡专卖店人皇大厅/正规房卡找谁买Sa9Ix苹果iPhone 17手机即将进入量...
推荐一款!牛牛充值房卡卡丁互娱... 您好!微信卡丁互娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(卡丁互娱)大厅介绍:...
终于知道”新漫游房卡获取“先锋... 房卡获取是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房卡...
科普!有没有炸金花房卡一张多少... 微信游戏中心:炸金花房卡,添加微信【8488009】,进入游戏中心或相关小程序,搜索“微信炸金花房卡...
终于知道”圣游房卡获取方式“新... 终于知道”圣游房卡获取方式“新猴王大厅房间卡怎么购买游戏中心打开微信,添加客服【113857776】...
牛牛链接房卡在哪里弄/微信金花... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
科技实测!金花房卡怎么购买玄龙... 微信游戏中心:玄龙大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
正规平台有哪些,如何购买金花房... 新天王/老夫子大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:3...
科普!微信开炸金花房卡怎么买,... 微信游戏中心:炸金花房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信炸金花房...
终于知道”黑桃A哪里买低价获取... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
推荐一款!牛牛房卡制作链接烛龙... 您好!微信烛龙大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(烛龙大厅)大厅介绍:...
正规平台有哪些,金花房卡专卖店... 今 日消息,神龙大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
一分钟了解!金花房卡批发生肖系... 生肖系列/新大圣房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
链接金花房卡哪里买/微信金花链... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
终于知道”新澳娱怎么买房卡“新... 怎么买房卡是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房...
科普!微信如何创建金花房间链接... 微信游戏中心:牌九房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信牌九房卡”...
科技实测!斗牛房间怎么创建的天... 科技实测!斗牛房间怎么创建的天道联盟/随意玩/微信链接房卡充值链接Sa9Ix苹果iPhone 17手...
玩家攻略,金花房卡怎么购买飞鹰... 今 日消息,飞鹰互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...