C++ list容器学习总结
----------------------------list
链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域
链表内存是非连续的
添加和删除元素 其时间复杂度都为常数项,不需要移动元素,比数组添加删除效率更高
链表不是只有在需要的时候才分配内存
链表需要额外的空间保存节点关系 前驱、后继关系
----------特性总结
采用动态存储分配,不会造成内存浪费和溢出
链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素
链表灵活,但是空间和时间额外耗费较大
----------list常用API
list构造函数
list<T> lstT; list采用模板类实现,对象的默认构造形式
list(beg,end); 构造函数将[beg,end)区间中的元素拷贝给本身
list(n,elem); 构造函数将n给elem拷贝给本身
list(const list& lst); 拷贝构造函数
list数据元素插入、删除操作
push_back(elem); 在容器尾部加入一个元素
pop_back(); 删除容器最后一个元素
push_front(elem); 在容器开头插入一个元素
pop_front(); 移除容器中第一个元素
insert(pos,elem); 在pos位置插入elem元素的拷贝,返回新数据的位置
insert(pos,n,elem); 在pos位置插入n个elem元素的拷贝,无返回值
insert(pos,beg,end); 在pos位置插入[beg,end)区间的数据,无返回值
clear(); 移除容器的所有数据
erase(beg,end); 删除[beg,end)区间的数据,返回下一个数据的位置
erase(pos); 删除pos位置的数据,返回下一个数据的位置
remove(elem); 删除容器中所有与elem值匹配的元素
list大小操作
size(); 返回容器中元素的个数
empty(); 判断容器是否为空
reserve(num); 重新制定容器的长度为num,若容器变长的,则以默认值填充新位置
list赋值操作
assign(beg,end); 将[beg,end)区间中的数据拷贝赋值给本身
ssign(n,elem); 将n个elem拷贝赋值给本身
list& operator= (const list& lst); 重载=操作符
swap(lst); 将lst与本身的元素互换
list数据存取
front(); 返回第一个元素
back(); 返回最后一个元素
list反转排列排序
reverse(); 反转链表,比如lst包含1,3,5元素,运行此方法后lst就包含5,3,1元素
sort(); list排序
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
void test01 () {
list<int> lst1;
list<int> lst2(10,10); //有参构造
list<int> lst3(lst2); //拷贝
list<int> lst4(lst2.begin(),lst2.end());
for (list<int>::iterator it = lst4.begin();it != lst4.end();it ++) {
cout << *it << " ";
}
cout << endl;
}
void test02 () {
list<int> lst;
lst.push_back(100);
lst.push_front(200);
lst.push_front(200);
lst.push_front(200);
lst.push_back(300);
lst.push_back(200);
lst.push_back(200);
lst.push_back(400);
lst.insert(lst.begin(),500);
lst.insert(lst.end(),600);
list<int>::iterator it = lst.begin();
it ++;it ++;
lst.insert(it,700);
// lst.pop_back();
// lst.pop_front();
// lst.erase(lst.begin(),lst.begin());
lst.remove(200); //删除匹配的所有值
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
}
//交换
void test03 () {
list<int> lst1;
lst1.assign(10,10);
list<int> lst2;
lst2 = lst1;
lst2.swap(lst1);
}
//旋转
void test04 () {
list<int> lst;
for (int i = 0;i < 10;i ++) {
lst.push_back(i);
}
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
lst.reverse();
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
}
bool cmp (int t1,int t2) {
return t1 > t2;
}
//排序
void test05 () {
list<int> lst;
lst.push_back(2);
lst.push_back(211);
lst.push_back(6);
lst.push_back(3);
lst.push_back(55);
lst.push_back(1);
//默认从小到大
lst.sort();
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
lst.sort(cmp);
for (list<int>::iterator it = lst.begin();it != lst.end();it ++) {
cout << *it << " ";
}
cout << endl;
}
C++ list容器学习总结的更多相关文章
- Docker容器学习梳理 - 应用程序容器环境部署
关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...
- Docker容器学习梳理 - 日常操作总结
使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- Java容器学习——List
Java容器学习--List 基础知识 数组: 优点:随机存取,可以快速访问元素 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: 优点: ...
- 【Ansible】ansible容器学习环境搭建
想要学习ansible,只有一个节点肯定是不行的,而搭建虚拟机又是一件非常费时费力费资源的事情,所以通过docker 快速搭建一个容器学习环境是一个不错的选择 1. 了解ansible部署 1.1 需 ...
- [原]容器学习(一):动手模拟spring的IoC
介绍 学习经典框架的实现原理以及设计模式在其实际中的运用,是非常有必要的,可以让我们更好进行面向对象. 本篇文章就来模拟Spring的IOC功能,明白原理后,可以更好的使用它,进而为进行面向对象提供一 ...
- C++容器学习,与结构体排序和set来一场邂逅
最近学习C++容器,积累一下.下面介绍set和multiset,并使用sort对结构体进行排序.C++之路漫漫其修远兮! 一.对结构体进行排序 // sort_struct.cpp : 定义控制台应用 ...
- 并发容器学习—ConcurrentSkipListMap与ConcurrentSkipListSet 原
一.ConcurrentSkipListMap并发容器 1.ConcurrentSkipListMap的底层数据结构 要学习ConcurrentSkipListMap,首先要知道什么是跳表或跳 ...
- Docker容器学习与分享07
Docker容器网络 在分享06中学完了bridge网络,接着学习none网络和host网络. Docker在安装时会在host上默认创建三个网络,分别是bridge.host.null. [root ...
- Docker容器学习与分享06
Docker容器网络 Docker有三种原生网络:none网络.host网络.bridge网络. 先来学习一下bridge网络. 首先使用ifconfig命令查看一下本机的网络设备: 从图中可以看见多 ...
随机推荐
- 【Java】UDP套接字编程
服务器 udpserver.java package server; import java.net.DatagramPacket; import java.net.DatagramSocket; i ...
- 离线版nRF Connect for Desktop安装方法
首先确保两台电脑都安装了nRF Connect for Desktop 先在一台能连网的电脑上安装自己想要的App 然后把APP拷贝到没有网的电脑上 从%USERPROFILE%\.nrfconnec ...
- Pycharm两种快速激活方式(附最新激活码和插件)
小张的Pycharm最近弹出提示框 Your license has expired提示过期....纳尼!!!! 是不是看到这个也很头疼,.于是我就在想有没有一种方式可以让他永久免费的,于是小张从网上 ...
- Java 21 新特性
Java 21 是 Java 语言的一次重要更新,引入了若干新的特性,提升了开发者的编程效率和代码质量.本文将详细介绍 Java 21 的新特性,包括基础概念.使用方法.常见实践以及最佳实践. 简介 ...
- Junit单元测试的maven设置
maven 官方文档: https://maven.apache.org/surefire/maven-surefire-plugin/usage.html maven是通过插件 maven-sure ...
- Missing Semester
计算机教育中缺失的一课 The Missing Semester of Your CS Education 文档:https://missing-semester-cn.github.io/ 网课:h ...
- 25.9K star!AI一键生成高清短视频,这个开源神器让内容创作起飞!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "MoneyPrinterTurbo 是基于AI大模型的全自动短视频生成工具,只需 ...
- linux 指定运行级别
目录 基本介绍 指定运行级别 基本介绍 0:关机 1:单用户 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重启 常用的运行级别是3和5,也可以 ...
- 【译】Visual Studio 推出预览版 Agent 模式
规划.构建.测试.修复 -- 一切只需一个提示. Visual Studio 17.14 版本已向所有用户公开预览版 Agent 模式.Visual Studio 中的 Agent 模式允许您使用自然 ...
- codeup之C语言10.1+C语言10.2(指针
Description 输入a和b两个整数,按先大后小的顺序输出a和b.注意请使用指针变量的方式进行比较和输出. Input 两个用空格隔开的整数a和b. Output 按先大后小的顺序输出a和b,用 ...