C++标准模版库(STL)双向链表(list)的使用

双向链表是一个常用的数据结构。它并不复杂,如果我们要自己实现也不是太困难的事情。但既然STL已经给我们提供了一个,不妨直接用。这样做,不但省时省力,而且代码的复用性也好。

头文件与模板类

要想使用STL提供的双向链表,需要包含头文件

#include <list>

这样,便可以使用模板类list<T>。

初始化

初始化一个list很简单,用

std::list<T> L;

便可以初始化一个空的链表。用

std::list<T> L{ t1, t2, t3 };

便可以初始化一个有三个元素的链表。

例如,

std::list<int> L1{ 20, 13 };

则L1是一个有2个int的链表。再例如,

std::list<std::string> L2{ "实变函数", "泛函分析", "微分几何", "抽象代数" };

则L2是一个有4个字符串的链表。

增、删元素

list<T>的成员函数push_back,push_front,pop_back,pop_front的作用分别是,在尾部增加元素,在头部增加元素,在尾部删除元素,在头部删除元素。

前两个函数的参数类型是(T&&)(C++11的“移动语义”),后两个函数没有参数。

这4个函数都没有返回值。

大小(size)

链表的大小指的是这个链表中有多少个元素,而不是这个链表在内存中占用多少个字节。

获取链表的大小可以用list<T>的成员函数size。它没有参数,返回值为size_t。

迭代器

迭代器是一个类,它所表达的是一个位置。下面的代码将L1的所有元素翻倍。

for (auto it = L1.begin(); it != L1.cend(); ++it)
{
    (*it) *= 2;
}

通过迭代器删除元素

用函数list<T>::erase可以通过迭代器删除元素。它的参数为指向要删除的元素的迭代器。

时间: 2024-12-23 01:16:31

C++标准模版库(STL)双向链表(list)的使用的相关文章

.NET中是否可用标准模版库(STL)

分析问题 标准模版库(STL)实在惠普实验室开发出来的一套算法类库的集合,从概念上主要区分为三大部分: 1.算法(algorithm). 2.容器(container). 3.迭代器(iterrator). STL的设计都致力于打造通用的算法和类库,例如一个排序的算法,可能针对包含不同类型元素的集合进行排序.在C++中,这样的通用性需要依靠模版来实现,而在.NET中,则依靠泛型..NET中的STL类库有Wintellect团队开发完成,类库名称为Power Collections,作为一个通用的

八、C++ 标准模板库-STL概述

C++ 标准模板库-STL概述 一.基本概念 1.1 泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用,重用在两个方面有体现: 面向对象的思想:继承和多态,标准类库 泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库 STL 简单地说就是使用模板的程序设计法.将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法. 标准模板库

标准模板库--STL

标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库STL 简单地说就是使用模板的程序设计法. 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法.标准模板库 (Standard

PKU C++程序设计实习 学习笔记6 标准模板库STL

标准模板库STL 8.1 STL概述 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用:1.面向对象的思想:继承和多态,标准类库  2.泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库 STL 简单地说就是使用模板的程序设计法. 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法. 标准模

实验8 标准模板库STL

一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http://acm.hpu.edu.cn/contest.php?cid=1020,密码c++08,共有5道题.将答题过程简单记录到实验过程中. 将答题结果写到实验结果中,并根据答题结果进行分析.反思,将其写到实验分析中,并写上实验时间.

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

C++ Primer 学习笔记_13_标准模板库_list双向链表容器

C++ Primer 学习笔记_13_标准模板库_list双向链表容器 list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入.删除和查找都是超快速的.下图是双向循环链表的结构示意图. list的每个节点有三个域:前驱元素指针域.数据域和后继元素指针域.前驱元素指针域保存了前驱元素的首地址:数据域则是本节点的数据:后继元素指针域则保存了后继元素的首地址.list的头结点的前驱元素指针域保存的是链表中尾元素的首地址,而list的尾

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

C++ 标准模板库STL 队列 queue 使用方法与应用介绍

C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型. 定义queue对象的示例代码如下: queue<int> q1; queue<double> q2; queue的基本操作有: 入队,如例:q.push(x); 将x接到队列的末端. 出队,如例:

C++的标准模板库(STL)简介

STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的.在被引入C++之前该技术就已经存在了很长的一段时间.后来STL成为ANSI/ISO C++标准的一部分.各个C++厂商也有各自相应的模板库,这些库效率可能很高,但可移植性不一定好. 在C++标准中,STL被组织为下面的17个头文件:<algorithm>.<deque>.<functional>.<iterator>.<arra