【STL】C++ list 基本使用

目录

一 list 常见构造

1 空容器构造函数(默认构造函数)

2 Fill 构造函数

3 Range 构造函数

4 拷贝构造函数

二 list迭代器

1 begin && end

2 rbegin && rend

三 list 容量操作

四 list 修改操作

1 assign 

2  push_front && pop_back

3 push_back && pop_back

4  insert

5 erase

6 swap

7. resize

8 clear

9 关于 emplace系列操作说明

五 list 元素访问

六 其他操作

1 splice

2 remove

3 unique

4 sort

5  reverse 

七 总结 


一 list 常见构造

1 空容器构造函数(默认构造函数)

构造一个没有元素的空容器。

2 Fill 构造函数

构造一个包含 n 个元素的容器。每个元素都是 val 的副本。

3 Range 构造函数

构造一个容器,其中包含与范围 [first,last] 一样多的元素,每个元素都按相同的顺序从该范围中的相应元素构造而成。

4 拷贝构造函数

构造一个容器,其中包含 x 中每个元素的副本,顺序相同。

#include<iostream>
#include<list>
using namespace std;void Print(list<int>& lt)
{list<int>:: iterator it = lt.begin();while (it != lt.end()){cout << *it << " ";it++;}cout << endl;
}int main()
{list<int> a;list<int> b(4, 100);list<int> c(4);list<int> d(b.begin(), b.end());list<int> e(b);cout << "b: ";Print(b);cout << "c: ";Print(c);cout << "d: ";Print(d);cout << "e: ";Print(e);return 0;
}

C++11构造

void Print(list<int>& lt)
{list<int>:: iterator it = lt.begin();while (it != lt.end()){cout << *it << " ";it++;}cout << endl;
}int main()
{list<int> lt1{ 1, 2, 3, 4, 5 };Print(lt1);return 0;
}

 

二 list迭代器

list模式和vector如出一辙

注意:

ist的迭代器是支持++--操作的(前后缀都支持)
但是不支持+-操作,因为链表不能进行随机访问操作,只能O(n)查询

1 begin && end

iterator begin();const_iterator begin() const;
iterator end();const_iterator end() const;
void Test3()
{list<int> lt(4, 1);list<int>::iterator it = lt.begin();while (it != lt.end()){cout << *it << ' ';++it;}cout << endl;const list<int> llt(4, 10);list<int>::const_iterator itt = llt.begin();while (itt != llt.end()){cout << *itt << ' ';++itt;}}

2 rbegin && rend

reverse_iterator rbegin();const_reverse_iterator rbegin() const;
reverse_iterator rend();const_reverse_iterator rend() const;
void Test4()
{list<int> lt(5);list<int>::reverse_iterator it = lt.rbegin();int i = 1;while (it != lt.rend()){*it += i;++it;++i;}for (auto e : lt){cout << e << ' ';}}

三 list 容量操作

 这里直接代码演示

void Test5()
{list<int> lt1;if (lt1.empty()) cout << "empty" << endl;else cout << "full" << endl;list<int> lt2{ 1, 2, 3, 4 };cout << "lt1: " << lt1.size() << "  lt2: " << lt2.size() << endl;
}

四 list 修改操作

1 assign 

将新内容分配给 list 容器,替换其当前内容,并相应地修改其大小。

range (1)	
template <class InputIterator>  void assign (InputIterator first, InputIterator last);
fill (2)	
void assign (size_type n, const value_type& val);
void Test6()
{std::list<int> first;std::list<int> second;first.assign(7, 100);                      second.assign(first.begin(), first.end()); int myints[] = {1776,7,4 };first.assign(myints, myints + 3);            cout << "first: ";for (auto e : first){cout << e << " ";}cout << endl;cout << "second: ";for (auto e : second){cout << e << " ";}cout << endl;
}

2  push_front && pop_back

void push_front (const value_type& val);
void pop_front();
void Test7()
{list<int> lt = { 1, 2 };lt.push_front(100);for (auto e : lt){cout << e << " ";}cout << endl;lt.pop_front();for (auto e : lt){cout << e << " ";}cout << endl;
}

3 push_back && pop_back

void push_back (const value_type& val);
void pop_back();
void Test8()
{list<int> lt = { 1, 2 };lt.push_back(100);for (auto e : lt){cout << e << " ";}cout << endl;lt.pop_back();for (auto e : lt){cout << e << " ";}cout << endl;
}

4  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);
void Test9()
{list<int> lt(4, 10);lt.insert(lt.begin(), 100);for (auto e : lt){cout << e << ' ';}cout << endl;lt.insert(lt.end(), 4, 100);for (auto e : lt){cout << e << ' ';}cout << endl;}

5 erase

从容器中删除单个元素 (position) 或一系列元素 ( [first,last))

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
void Test10()
{list<int> lt{ 1, 2, 3, 4, 5, 6};lt.erase(lt.begin());for (auto e : lt){cout << e << ' ';}cout << endl;lt.erase(++lt.begin(), lt.end());for (auto e : lt){cout << e << ' ';}
}

6 swap

 通过 x 的内容交换容器的内容,x 是另一个相同类型的容器对象。size可能有所不同。

void swap (list& x);
void Test11()
{list<int> l1(4, 10);list<int> l2(4, 1);l1.swap(l2);cout << "l1: ";for (auto e : l1){cout << e << ' ';}cout << endl;cout << "l2: ";for (auto e : l2){cout << e << ' ';}  
}

7. resize

调整容器的大小,使其包含 n 个元素。

void resize (size_type n);
void resize (size_type n, const value_type& val);

如果 n 小于当前容器大小,则内容将减少到其前 n 个元素,删除超出(并销毁它们)的元素。

如果 n 大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到 n 的大小。

如果指定了 val,则新元素将初始化为 val 的副本,否则,它们将进行值初始化(0)。

void Test12()
{list<int> mylist;for (int i = 1; i < 10; ++i) mylist.push_back(i);mylist.resize(5);cout << "mylist contains:";for (std::list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)std::cout << ' ' << *it;cout << endl;mylist.resize(8, 100);cout << "mylist contains:";for (std::list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)std::cout << ' ' << *it;cout << endl;mylist.resize(12);cout << "mylist contains:";for (std::list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it)std::cout << ' ' << *it;cout << endl;}

8 clear

 从容器中删除所有元素(这些元素被销毁),使容器的大小为0。

void clear() noexcept;
void Test13()
{list<int> lt(1, 4);lt.clear();cout << lt.size() << endl;for (auto e : lt){cout << e << ' ';}cout << endl;
}

9 关于 emplace系列操作说明

这个系列的操作放在 右值引用讲解完之后再讲, 这样才能更好的理解. 大家不需要着急的, 因为 上面讲的完全够用, 而且emplace 是优化, 并不是其他功能

五 list 元素访问

 

void Test13()
{list<int> lt{ 1, 2, 3, 4 };cout << lt.front() << endl;cout << lt.back() << endl;
}

六 其他操作

1 splice

将元素从一个列表转移到另一个列表

void splice(iterator position, list& x);
将 x 的所有元素转移到容器中void splice(iterator position, list& x, iterator i);
仅将 i 指向的元素从 x 传输到容器中void splice(iterator position, list& x, iterator first, iterator last);
将范围 [first,last) 从 x 传输到容器中。
void Test14()
{list<int> mylist1 = { 1, 2, 3, 4 }, mylist2 = { 10, 20, 30 };list<int>::iterator it = mylist1.begin();++it;         // points to 2mylist1.splice(it, mylist2); // mylist1: 1 10 20 30 2 3 4cout << "mylist1:  ";for (auto e : mylist1){cout << e << " ";}cout << endl;cout << "mylist2:  ";for (auto e : mylist2){cout << e << " ";}cout << endl;mylist2.splice(mylist2.begin(), mylist1, mylist1.begin());cout << "mylist1:  ";for (auto e : mylist1){cout << e << " ";}cout << endl;cout << "mylist2:  ";for (auto e : mylist2){cout << e << " ";}cout << endl;mylist1.splice(mylist1.begin(), mylist2, mylist2.begin(), mylist2.end());cout << "mylist1:  ";for (auto e : mylist1){cout << e << " ";}cout << endl;cout << "mylist2:  ";for (auto e : mylist2){cout << e << " ";}cout << endl;
}

2 remove

从容器中删除所有与 val相等的元素。这将调用这些对象的析构函数,并通过删除的元素数来减小容器大小。

vvoid remove (const value_type& val);
int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(2);lt.push_back(4);lt.push_back(5);cout << lt.size() << endl;lt.remove(2);for (auto e : lt){cout << e << " ";}cout << endl;cout << lt.size() << endl;return 0;
}

3 unique

从容器中每个连续的相等元素组中删除除第一个元素之外的所有元素。请注意,只有当某个元素与其前面的元素相等时,该元素才会从列表容器中删除。因此,此函数对于排序列表特别有用。

void unique();
int main()
{list<int> lt;lt.push_back(1);lt.push_back(1);lt.push_back(2);lt.push_back(4);lt.push_back(2);lt.push_back(2);lt.push_back(4);lt.push_back(3);lt.push_back(5);for (auto e : lt){cout << e << " ";}cout << endl;lt.sort();//需要先排序lt.unique();for (auto e : lt){cout << e << " ";}cout << endl;return 0;
}

4 sort

对容器中的元素进行排序

对列表 中的元素进行排序,改变它们在容器中的位置。

void sort();
void Test15()
{list<int> lt{ 2, 1, 2, 4, 10, 11, 99, 88 };lt.sort();for (auto e : lt){cout << e << " ";}}

5  reverse 

反转列表容器 中元素的顺序

void reverse()void reverse()
int main()
{list<int> lt;lt.push_back(1);lt.push_back(2);lt.push_back(3);lt.push_back(4);lt.push_back(5);for (auto e : lt){cout << e << " ";}cout << endl;lt.reverse();for (auto e : lt){cout << e << " ";}cout << endl;return 0;
}

七 总结 

list终于抽时间写完了, 首先本节大多数代码实验, 理论讲解少, 还是那句话, 如果对概念不清楚, 请到 string看, 或者翻阅文档, 这些都是最基本的素养.  list 很多操作和 vector一样的, 但也有差别, 注意区分即可.

今天去中医看病, 医生说 眼睛就是你的肾, 舌头是你的心脏, 大家一定注意饮食规律, 不要久坐啊.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/14952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客NC362 字典序排列【中等 DFS Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/de49cf70277048518314fbdcaba9b42c 解题方法 DFS&#xff0c;剪枝Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回…

【小笔记】如何在docker中更新或导入neo4j数据?

如何在docker中更新或导入neo4j数据&#xff1f; &#xff08;1&#xff09;背景&#xff1a; 我尝试了4.4.9和5.19.0版本的Neo4j社区版&#xff0c;基于他们的镜像创建容器后&#xff0c;需要导入我准备好的csv文件或dump文件&#xff0c;因为数据量非常大&#xff0c;所以采…

2024电工杯数学建模B题Python代码+结果表数据教学

2024电工杯B题保姆级分析完整思路代码数据教学 B题题目&#xff1a;大学生平衡膳食食谱的优化设计及评价 以下仅展示部分&#xff0c;完整版看文末的文章 import pandas as pd df1 pd.read_excel(附件1&#xff1a;1名男大学生的一日食谱.xlsx) df1# 获取所有工作表名称 e…

HarmonyOS-MPChart绘制一条虚实相接的曲线

本文是基于鸿蒙三方库mpchart&#xff08;OpenHarmony-SIG/ohos-MPChart&#xff09;的使用&#xff0c;自定义绘制方法&#xff0c;绘制一条虚实相接的曲线。 mpchart本身的绘制功能是不支持虚实相接的曲线的&#xff0c;要么完全是实线&#xff0c;要么完全是虚线。那么当我…

根据多个坐标经纬度获取到中心点的经纬度,scala语言

文章目录 前言scala 代码 总结 前言 Scala 语言 通过多个经纬度坐标点, 计算出中心点, 这里使用的是 Scala 语言,其他的语言需要自行转换。求出来的并不是原有的点&#xff0c;而是原有点的中心位置的点。 scala 代码 package com.dw.process.midimport java.lang.Double.pa…

C语言 | Leetcode C语言题解之第97题交错字符串

题目&#xff1a; 题解&#xff1a; bool isInterleave(char* s1, char* s2, char* s3) {int n strlen(s1), m strlen(s2), t strlen(s3);int f[m 1];memset(f, 0, sizeof(f));if (n m ! t) {return false;}f[0] true;for (int i 0; i < n; i) {for (int j 0; j &l…

基于UDP的tftp的文件传输

#define SER_PORT 69 #define SER_IP "192.168.125.71" #define CLT_PORT 6666 #define CLT_IP "192.168.125.158" int main(int argc, const char *argv[]) {//创建套接字文件描述符int cfd socket(AF_INET,SOCK_DGRAM,0);if(cfd -1){perror("sock…

vue2-computed,vue3+watch 前端实现列表搜索,结合filter+some+indexOf

vue2 computed实现 computed: {FBAAddressListComputed () {if (!this.fbaInput) return this.FBAAddressListconst lowerCaseInput this.fbaInput.toLowerCase()return this.FBAAddressList.filter((item) > {return [item.fbaCode, item.zipCode, item.countryCode, ite…

Python列表,元组,集合,字典详解一篇搞懂

目录 介绍 列表(List) 集合(Set) 字典(Dict) 元组(Tuple) 列表 列表定义 ​编辑 列表切片 列表常用方法 append extend ​编辑 insert ​编辑 remove pop ​编辑 clear ​编辑 列表修改元素 sort 升序 倒序 reverse count ​编辑 index 浅拷贝和深拷贝 …

《书生·浦语大模型实战营》第一课 学习笔记:书生·浦语大模型全链路开源体系

文章大纲 1. 简介与背景智能聊天机器人与大语言模型目前的开源智能聊天机器人与云上运行模式 2. InternLM2 大模型 简介3. 视频笔记&#xff1a;书生浦语大模型全链路开源体系内容要点从模型到应用典型流程全链路开源体系 4. 论文笔记:InternLM2 Technical Report简介软硬件基础…

基于Java的地震震中附近城市分析实战

目录 前言 一、空间数据说明 1、空间查询 二、Java后台开发 1、模型层设计与实现 2、控制层设计与实现 三、Leaflet地图开发 1、地震震中位置展示 2、附近城市展示 3、成果展示 总结 前言 随着全球气候变化和地壳活动的不断演变&#xff0c;地震作为一种自然灾害&…

第十三节:带你梳理Vue2 : watch侦听器

官方解释:> 观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式&#xff0c;用一个函数取代<br/>## 1. 侦听器的基本使用侦听器可以监听data对象属性或者计算属性的变化watch是观察属性的…

现代C++ 如何使用 Lambda 使代码更具表现力、更容易理解?

使用 Lambda 使代码更具表现力 一、Lambda VS. 仿函数二、总结 一、Lambda VS. 仿函数 Lambda 是 C11 中最引人注目的语言特性之一。它是一个强大的工具&#xff0c;但必须正确使用才能使代码更具表现力&#xff0c;而不是更难理解。 首先&#xff0c;要明确的是&#xff0c;…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件&#xff0c;使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的&#xff0c;需要解析.vue文件&#xff0c;我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

防范TOCTOU竞态条件攻击

防范TOCTOU竞态条件攻击 在软件开发过程中&#xff0c;我们常常会遇到需要在使用资源之前检查其状态的情况。然而&#xff0c;如果资源的状态在检查和使用之间发生了变化&#xff0c;那么检查的结果可能会失效&#xff0c;导致软件在资源处于非正常状态时执行无效操作。这种时…

[datawhale202405]从零手搓大模型实战:TinyAgent

结论速递 TinyAgent项目实现了一个简单的Agent智能体&#xff0c;主要是实现了ReAct策略&#xff08;推理调用工具的能力&#xff09;&#xff0c;及封装了一个Tool。 项目实现有一定的疏漏。为了正确运行代码&#xff0c;本次对代码Agent部分进行了简单修改&#xff08;完善…

windows安装rocketmq

1.下载连接 https://rocketmq.apache.org/download/ 2.解压到D盘下&#xff08;其他位置也可以&#xff09; 3.配置环境变量 需要有jdk环境 新建ROCKETMQ_HOME&#xff0c;刚刚解压的位置 编辑Path&#xff0c;新增%ROCKETMQ_HOME%\bin 4.启动mqnameserver 进入安装bin目录下…

交叉编译——

什么是交叉编译 交叉编译 是在一个平台上生成临海一个平台可执行代码. eg.在windows上面编写C51代码&#xff0c;并编译生成可执行代码。如xx.hex 我们在Ubuntu上编写树莓派的代码&#xff0c;并编译成可执行代码。a.out. 是在树莓派上运行&#xff0c;不在Ubuntu Linux上面运…

便携式iv测试仪特点

TH-PV30便携式IV测试仪是一种用于测量半导体器件电学特性的设备&#xff0c;它具有体积小、重量轻、便于携带等特点&#xff0c;广泛应用于半导体行业、科研实验室以及教育领域。 该测试仪的工作原理基于四探针法&#xff0c;通过在半导体器件表面放置四个金属探针&#xff0c…

【vs2022】安装copilot和reshaper

直接安装新版vs 17.10 自带集成的copilot支持安装resharper 可以跳过市场里的reshper安装好后依然可以直接使用vs。 resharper 2024.1.2 市场里还是i老版本&#xff1a; copilot 不兼容,这个是之前市场安装的版本 官方建议用vs intall 安装 安裝 GitHub Copilot GitHub.Co…