C++ STL 之 list
#include <list>
#include <iostream>
using namespace std; // 打印list元素
void PrintList(list<int>& L)
{
for (list<int>::iterator it = L.begin(); it != L.end(); it++)
{
cout << *it << " ";
}
cout << endl;
} // 初始化
// list<T> lstT;//list 采用采用模板类实现,对象的默认构造形式:
// list(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
// list(n, elem);//构造函数将 n 个 elem 拷贝给本身。
// list(const list &lst);//拷贝构造函数。
void test01()
{
list<int> mlist1;
list<int> mlist2(, );
list<int> mlist3(mlist2);
list<int> mlist4(mlist2.begin(), mlist2.end());
PrintList(mlist2);
PrintList(mlist3);
PrintList(mlist4);
cout << "-------------------------------" << endl;
} // 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 值匹配的元素
void test02()
{
list<int> mlist;
// 插入操作
mlist.push_back();
mlist.push_front();
mlist.insert(mlist.begin(), );
mlist.insert(mlist.end(), );
mlist.insert(mlist.end(), );
PrintList(mlist);
list<int>::iterator it = mlist.begin();
it++;
it++;
mlist.insert(it, );
mlist.insert(mlist.end(), );
PrintList(mlist);
// 删除
// mlist.pop_back();
// mlist.pop_front();
mlist.remove(); // 删除匹配所有值
PrintList(mlist);
// mlist.erase(mlist.begin(), mlist.end());
PrintList(mlist);
cout << "-------------------------------" << endl;
} // list大小操作
// size();//返回容器中元素的个数
// empty();//判断容器是否为空
// resize(num);//重新指定容器的长度为 num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
// resize(num, elem);//重新指定容器的长度为 num,若容器变长,则以 elem 值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 // 赋值操作
// assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
// assign(n, elem);//将 n 个 elem 拷贝赋值给本身。
// list& operator=(const list &lst);//重载等号操作符
// swap(lst);//将 lst 与本身的元素互换。
void test03()
{
list<int> mlist;
mlist.assign(, );
list<int> mlist2;
mlist2 = mlist;
PrintList(mlist);
mlist2.push_back();
PrintList(mlist2);
cout << "------------------" << endl;
mlist2.swap(mlist);
PrintList(mlist);
PrintList(mlist2);
cout << "------------------" << endl;
} // 排序 翻转
// reverse();//反转链表,比如 lst 包含 1,3,5 元素,运行此方法后,lst 就包含 5,3,1 元素。
// sort(); //list 排序
void test04()
{
list<int> mlist;
for (int i = ; i < ; i++)
{
mlist.push_back(i);
}
PrintList(mlist);
// 容器元素反转
mlist.reverse();
PrintList(mlist);
cout << "--------------------" << endl;
} bool muCompare(int v1, int v2)
{
return v1 > v2;
} // 排序
void test05()
{
list<int> mlist;
mlist.push_back();
mlist.push_back();
mlist.push_back();
mlist.push_back();
PrintList(mlist);
// 排序默认从小到大排序
mlist.sort();
PrintList(mlist);
// 从大到小排序
mlist.sort(muCompare);
PrintList(mlist);
} int main()
{
test01();
test02();
test03();
test04();
test05();
getchar();
return ;
}
C++ STL 之 list的更多相关文章
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- STL的std::find和std::find_if
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- C++ STL简述
前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL的使用
Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...
随机推荐
- code review 20190705
命名规范: 做了什么? 目的是什么? 在什么基础上进行? 注释说明 sql update,where 先行????? 警告: 清空所有警告:所有隐藏比较深入的bug,都是由警告带来的 + 忽略警告 枚 ...
- 【从零开始搭建K8S】【第一篇】CentOS7.6离线安装Docker(手动安装以及基于yum本地源安装)
下载CentOS7.6以及最小化安装CentOS7.6版本.由于CentOS属于开源软件,在国内也有很多的mirror站点可供下载,我选择的是华为站点进行下载:http://mirrors.huawe ...
- Linux特基础的知识(接上一条)
grep:文本过滤工具(找到要找的文本) print lines matching a pattern例: 打印 行 匹配 一个 模式/样式[root@oldboyedu /opt]# grep &q ...
- 【VS开发】IPicture在指定窗口绘制图
1.利用IPicture接口加载.显示图片 IPicture接口管理一个图片对象和它的属性.图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持.图像对象的主要接口是IPict ...
- vscode插件Project Manager
参考链接:https://www.jianshu.com/p/b11532b91414
- 删除Vue中无权限的【node_modules】文件
npm install rimraf -g rimraf node_modules
- shell 入门学习
目录 shell 入门学习 注释 执行与启动 变量 语法 调试 title: shell 入门学习 date: 2019/7/16 15:47:49 toc: true --- shell 入门学习 ...
- centos7 64位如何配置网络
在虚拟机的操作的时候,修改 ifcfg-eno16777736 可能没有权限 su - //进入root用户状态chmod a+w ifcfg-eno16777736//把该文件修改为可写状态 我 ...
- pptpd的log整理
前言: 最近有时候,我的pptpd会莫名崩掉.这时,在外边的我连不到内网,气的一比. 这时候,就需要去查一查log日志了. 所以就记录一下怎么调日志的: 1. 修改/etc/ppp/pptpd.o ...
- 【AtCoder】ARC067
ARC067 C - Factors of Factorial 这个直接套公式就是,先求出来每个质因数的指数幂,然后约数个数就是 \((1 + e_{1})(1 + e_{2})(1 + e_{3}) ...