【C++STL基础入门】list基本使用

文章目录

  • 前言
  • 一、list简介
    • [1.1 list是什么](#1.1 list是什么)
    • [1.2 list的头文件](#1.2 list的头文件)
  • 二、list
    • [2.1 定义对象](#2.1 定义对象)
    • [2.2 list构造函数](#2.2 list构造函数)
    • [2.3 list的属性函数](#2.3 list的属性函数)
  • 总结

前言

STL(Standard Template Library)是C++标准库的一个重要组成部分,提供了一套丰富的数据结构和算法,可以大大简化C++程序的开发过程。其中,list容器是STL提供的一种双向链表实现的数据结构,具有高效的插入和删除操作,适用于需要频繁插入和删除元素的场景。本文将介绍list容器的基本使用方法,包括头文件的引入、定义和构造函数、属性函数以及运算符和算法的示例代码。


一、list简介

1.1 list是什么

STL(标准模板库)的list是C++中的一种数据结构,用于存储和操作链表。链表是一种动态数据结构,与数组不同,链表的元素在内存中不是连续存储的,而是通过指针连接起来。

list可以存储任意类型的数据,并提供了一系列方法来对链表进行操作,如在链表头部或尾部插入/删除元素,以及在任意位置插入/删除元素等。它还支持双向迭代器,可以方便地遍历链表的元素。

使用list的好处是,它在插入和删除元素时效率很高,因为只需要调整指针的指向即可,不需要像数组一样移动其他元素。此外,list的大小可以根据需要自由扩展,并且不会产生内存碎片。

总之,STL的list是一种用于存储和操作链表的数据结构,通过指针将元素连接起来,提供了高效的插入和删除操作,适用于需要频繁插入和删除元素的场景。

1.2 list的头文件

cpp 复制代码
#include <list>

二、list

2.1 定义对象

cpp 复制代码
list<类型> 名称;

2.2 list构造函数

无参构造函数。创建一个空的"list"对象。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> myList;  // 创建一个空的int类型链表
    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. "list(size_type _Count)": 构造具有指定元素数量的"list"对象。

参数:

  • "_Count": 要创建的链表中元素的数量。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> myList(5);  // 创建一个包含5个默认值为0的int类型元素的链表
    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. "list(size_type _Count, const Type& _Val)": 构造具有指定元素数量和初始值的"list"对象。

参数:

  • "_Count": 要创建的链表中元素的数量。
  • "_Val": 初始化链表元素的值。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> myList(3, 10);  // 创建一个包含3个值为10的int类型元素的链表
    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. "list(InputIterator _First, InputIterator _Last)": 构造一个包含给定范围内元素的"list"对象。

参数:

  • "_First": 范围的起始迭代器。
  • "_Last": 范围的结束迭代器。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    std::list<int> myList(myVector.begin(), myVector.end());  // 使用vector中的元素构造一个新的链表
    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

以上示例展示了不同构造函数的使用方法,可以根据实际需求选择适合的构造函数来创建"list"对象。

2.3 list的属性函数

  1. "size()": 用于返回"list"中元素的数量。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};
    std::cout << "Size of myList: " << myList.size() << std::endl;  // 输出链表中元素的数量
    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. "resize()": 用于改变"list"的大小。

参数:

  • "new_size": 新的大小。
  • "value" (可选): 可以指定一个值,用于在扩大大小时在尾部添加的新元素的初始值。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3};
    myList.resize(5);  // 将链表的大小调整为5,默认填充0
    std::cout << "New size of myList: " << myList.size() << std::endl;
    
    myList.resize(8, 10);  // 将链表的大小调整为8,并在尾部填充值为10的元素
    std::cout << "New size of myList: " << myList.size() << std::endl;

    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

  1. "empty()": 用于检查"list"是否为空,即判断链表中是否没有元素。

示例代码:

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥cpp

cpp 复制代码
#include <iostream>
#include <list>

int main() {
    std::list<int> myList;
    if (myList.empty()) {
        std::cout << "myList is empty." << std::endl;
    } else {
        std::cout << "myList is not empty." << std::endl;
    }
    return 0;
}

﹤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ﹥

以上示例展示了"size()"、"resize()"和"empty()"函数的使用方法,可以根据需求使用这些函数来获取链表的大小、调整链表的大小以及检查链表是否为空。


总结

本文介绍了C++ STL的list容器的基本使用方法。通过引入头文件、定义和构造函数、属性函数以及运算符和算法的示例代码,我们可以发现list容器的灵活性和高效性,适用于频繁插入和删除元素的场景。使用list容器可以简化C++程序的开发过程,并提高效率。

希望本文能够帮助读者理解list容器的基本使用方法,以及它在实际编程中的作用和优势。如果有任何疑问,请随时提问。

相关推荐
Dontla31 分钟前
Rust泛型系统类型推导原理(Rust类型推导、泛型类型推导、泛型推导)为什么在某些情况必须手动添加泛型特征约束?(泛型trait约束)
开发语言·算法·rust
java小吕布1 小时前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
tumu_C1 小时前
C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
c++·开源
win x1 小时前
链表(Linkedlist)
数据结构·链表
杜若南星1 小时前
保研考研机试攻略(满分篇):第二章——满分之路上(1)
数据结构·c++·经验分享·笔记·考研·算法·贪心算法
Neophyte06081 小时前
C++算法练习-day40——617.合并二叉树
开发语言·c++·算法
Goboy1 小时前
工欲善其事,必先利其器;小白入门Hadoop必备过程
后端·程序员
慕容复之巅1 小时前
基于MATLAB的条形码的识别图像处理报告
开发语言·图像处理·matlab
云空1 小时前
《InsCode AI IDE:编程新时代的引领者》
java·javascript·c++·ide·人工智能·python·php
zqzgng2 小时前
Python 数据可视化pilot
开发语言·python·信息可视化