C++——STL标准模板库——容器详解——list

这篇具有很好参考价值的文章主要介绍了C++——STL标准模板库——容器详解——list。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、基本概念

(一)定义

list:双向链表。list是一种分布式存储的线性表,每个节点分为数据域和指针域,其中指针域中包含一个指向前驱节点的指针和一个指向后续节点的指针,基本模型如下:C++——STL标准模板库——容器详解——list,c++,开发语言

(二)特性

1、双向链表:每个元素都有一个前驱和一个后继,这种结构允许在链表的任何位置实现快速的插入和删除而不影响其他元素。插入和删除时间复杂度为O(1)。

2、迭代器:list提供了双向迭代器,支持++和--运算符,能够前后移动,但不支持随机访问,也就是不支持+、-、+=、-=运算。

3、优势和劣势:相对于deque或者vector,在任意位置插入或者删除元素效率较高;但随机访问效率较低。使用场景多为需要频繁插入或者删除元素时。

二、构造函数

(1)list<T>::list();                        默认构造函数

(2)list<T>::list(size_t size);       构造包含size个元素的链表,默认值为0;

(3)list<T>::list(size_t size,T value);        申请size大小链表,初始化为value;

(4)list<T>::list(initializer_list<int> _list);   初始化列表构造;

(5)list<T>::list(list<int>& other);               拷贝构造函数; 

(6)list<T::list(iterator begin,iterator end); 指定范围构造;

(7)list<T>::list(list<int>&& other);             移动构造;(c++11)

三、成员函数

(一)迭代器相关函数

begin()和end();                返回指向首节点迭代器和指向尾节点后面一个位置迭代器;

cbegin()和cend();             begin()和end()的常量迭代器

rbegin()和rend();              begin()和end()的反向迭代器

crbegin()和crend();           begin()和end()的反向常量迭代器

(二)大小相关函数

size_t list<T>::size();                        返回链表当前元素数量

size_t list<T>::max_size();               返回链表最大容纳元素数量

bool   list<T>::empty();                       判断链表是否为空

(三)访问函数

const T& list<T>::front();                                返回第一个元素常量引用;

const T& list<T>::back();                               返回最后一个元素常量引用;

(四)修改函数

void list<T>::push_back(T&value);                尾插

void list<T>::push_front(T&value);                头插

void list<T>::pop_back();                               尾删

void list<T>::pop_front();                               头删

void list<T>::remove(T&value);                     删除指定元素

void list<T>::unique();                                   删除相邻且重复的后续元素

void list<T>::insert(iterator pos,T&value);     指定位置插入元素,存在插入多个元素、插入区间、插入初始化列表等多个重载

void list<T>::splice(iterator pos,list<T>&other); 指定位置复制插入或者移动插入other链表(指定元素或指定区间的元素)

void list<T>::erase(iterator pos);                   删除迭代器指定位置的元素,或者区间

(五)查找函数

list<T>::itrator find(list<T>::iterator first,list<T>::iterator last,const T& value);          查找容器指定区间内的value值第一次出现的位置

int count(list<T>::iterator first,list<T>::iterator last,const T&value);                                                 查找容器指定区间内value的个数

lower_bound(value);        对于有序容器返回从左边找到的最合适的插入位置的迭代器

upper_bound(vlaue);       对于有序容器返回从右边找到的最合适的插入位置的迭代器

equal_range(value);        返回有序序列中第一个value值和最后一个value值出现位置的区间,返回值为pair类型,叫做对组。原型为pair<typename T,typename K>,代表包含两个数据类型的数据结构。first代表第一个类型,second代表第二个类型。

注意:这些函数不是容器的成员函数

(六)其他函数

list<T>::swap(list<T>&other);     交换两个链表的内容

list<T>::revers();                         翻转链表

list<T>::sort();                             排序函数,默认递增;当链表内元素是自定义类型或者需要递减排序时,需要传入比较函数作为参数。

list<T>::clear();                           清空链表

list<T>::resize(size_t newsize);  改变链表大小,大于原链表大小时,添加初始化元素;小于原链表大小时,从链表后面删除相应元素。

四、排序算法示例

#include<iostream>
using namespace std;
#include<list>
#include<algorithm>
#include<string>
class Person {
public:
	string m_Nmae;
	int m_Age;
	int m_Height;
};
void printPerson(const Person&p) {
	cout << "姓名:" << p.m_Nmae << " 年龄:" << p.m_Age << " 身高:" << p.m_Height << endl;
}
bool MyCompare(Person&p1, Person&p2) {
	if (p1.m_Age == p2.m_Age) {
		return p1.m_Height > p2.m_Height;
	}
	else {
		return p1.m_Age < p2.m_Age;
	}
}
void test() {
	Person p1 = { "张三",20,170 };
	Person p2 = { "李四",30,165 };
	Person p3 = { "王五",40,185 };
	Person p4 = { "赵六",40,180 };
	Person p5 = { "陈七",50,185 };
	list<Person>l;
	l.push_back(p1);
	l.push_back(p3);
	l.push_back(p4);
	l.push_back(p2);
	l.push_front(p5);
	for_each(l.begin(), l.end(), printPerson); cout << endl;
	l.sort(MyCompare);
	for_each(l.begin(), l.end(), printPerson);
}
int main(int argc,char const **argv) {
	test();
	return 0;
}

C++——STL标准模板库——容器详解——list,c++,开发语言 例子中对排序多加了一层逻辑,优先年龄排序,年龄相同时根据身高排序。文章来源地址https://www.toymoban.com/news/detail-793522.html

到了这里,关于C++——STL标准模板库——容器详解——list的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 15 标准模板库STL之容器1

    基础知识         1、vector和数组有点类似,但它比数组更好用。一般来说,数组的长度是不能动态拓展的,因此就需要考虑长度到底多大合适。长度不能过大,否则浪费内存;也不能过小,否则内存不够。vector正好弥补了这个缺陷,相当于一个可以自动改变数组长度的动

    2023年04月12日
    浏览(29)
  • 22 标准模板库STL之容器适配器

    概述         提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一

    2024年02月05日
    浏览(30)
  • STL标准模板库 vector容器与迭代器入门

    vector 就是一个连续的数据 C++11 std::vector a ={1,4,2,6,7}; 可以使用花括号来定义 容器的功能就是存储数据 迭代器的功能就是指向数据,并且可以实现前后移动(指针)算法和容器的接口的存在 vector功能是长度可变的数组, 身在栈上 里面的数据存储在堆上 因为栈不可动态扩容

    2023年04月23日
    浏览(35)
  • 【C++STL标准库】序列容器之deuqe与、orwa_list与list

    基本概念这里就不再浪费时间去解释,这里给出deuqe与、orwa_list、list的基本使用方法: deque队列: forward_list单向列表: list双向链表: 如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!

    2024年02月15日
    浏览(25)
  • C++ STL 标准模板库介绍与入门

    目录 1、概述 1.1、C++ 标准库 1.2、Boost库 2、STL 版本 2.1、HP 原始版本

    2024年02月05日
    浏览(48)
  • c++标准模板(STL)(std::array)(三)

    template     class T,     std::size_t N struct array; (C++11 起   std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T* 。它能作为聚合类型聚合初始化,只要

    2024年02月02日
    浏览(35)
  • 【C++】:STL——标准模板库介绍 || string类

    STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商

    2024年02月05日
    浏览(43)
  • 一天学完C++的标准模板库STL

    提到字符串,我们会想起C语言中的 char * ,这是一个指针。而在STL中 string 也是用来声明字符串的,但是 string 是一个类,需要导入库 #includestring 。 String 封装了 char * ,管理这个字符串,是一个 char* 型的 容器 。 string 本质上是一个动态的 char 数组。 使用String字符串的第一步

    2023年04月17日
    浏览(33)
  • 【C++学习】STL容器——list

    目录 一、list的介绍及使用 1.1 list的介绍  1.2 list的使用 1.2.1 list的构造  1.2.2  list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比 一、list的介绍及使用 1.1 list的介绍 list的文档介绍

    2024年02月14日
    浏览(30)
  • (AI创作实验)C++中的STL(标准模板库)

    STL概述 STL: (Standard Template Library) 标准模板库 包含一些常用的算法如排序查找,还有常用的数据结构如可变长数组、链表、字典等。 使用方便,效率较高 要使用其中的算法,需要#include C++中的STL(标准模板库)是一个非常强大的工具,为程序员提供了许多高效的数据结构和算

    2023年04月18日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包