1 //list容器 构造函数     //list赋值和交换   //list容器大小操作
2 //list插入和删除,移除 //清空 //list数据存取back(); front()
3 //list 反转和排序
4 #include<iostream>
5 #include<list>
6 #include<algorithm>
7
8 using namespace std;
9
10
11 //打印
12 void printList(const list<int>&L)
13 {
14 for (list<int>::const_iterator it = L.begin(); it != L.end(); it++)
15 {
16 cout << *it << " ";
17 }
18 cout << endl;
19 }
20
21
22 //构造函数
23 void test01()
24 {
25 list<int>L1; //默认构造
26
27 //添加数据
28 L1.push_back(10);
29 L1.push_back(20);
30 L1.push_back(20);
31 L1.push_back(40);
32
33
34 //遍历容器
35 printList(L1);
36
37
38 //区间构造
39 list<int>L2(L1.begin(), L1.end());
40 printList(L2);
41
42
43 //拷贝构造
44 list<int>L3(L2);
45 printList(L3);
46
47 //n个elem
48 list<int>L4(10, 222);
49
50 printList(L4);
51 }
52 //打印
53 void printList2(const list<int>& l2)
54 {
55 for (list<int>::const_iterator it = l2.begin(); it != l2.end(); it++)
56 {
57 cout << *it << " ";
58 }
59 cout << endl;
60 }
61
62 //list赋值和交换
63 void test02()
64 {
65 list<int>L2;
66
67 L2.push_back(10);
68 L2.push_back(20);
69 L2.push_back(30);
70 L2.push_back(40);
71
72 printList2(L2);
73
74 //赋值操z做
75 list<int>L3;
76 L3 = L2; //operator= 赋值
77 printList2(L3);
78
79 list<int>L4;
80 L4.assign(L3.begin(), L3.end());
81 printList2(L4);
82
83 list<int>L5;
84 L5.assign(10, 999);
85 printList2(L5);
86
87
88 }
89
90 //交换
91 void test03()
92 {
93 list<int>L2;
94
95 L2.push_back(10);
96 L2.push_back(20);
97 L2.push_back(30);
98 L2.push_back(40);
99
100 list<int>L6;
101 L6.assign(10, 555);
102
103
104 cout << "交换前:" << endl;
105 printList2(L2);
106 printList2(L6);
107
108 L2.swap(L6);
109 //L6.swap(L2);
110 cout << "交换后:" << endl;
111 printList2(L2);
112 printList2(L6);
113
114 }
115
116 //list容器大小操作
117 void test04()
118 {
119 list<int>L7;
120 L7.push_back(10);
121 L7.push_back(20);
122 L7.push_back(30);
123 L7.push_back(40);
124
125 printList2(L7);
126
127 //判读是否为空
128 if (L7.empty())
129 {
130 cout << "L7为空!" << endl;
131 }
132 else
133 {
134 cout << "L7不为空!!" << endl;
135 cout << "L7的元素个数为: " << L7.size() << endl;
136 }
137
138 //重新指定大小
139 L7.resize(10,5);
140 printList2(L7);
141
142 L7.resize(2);
143 printList2(L7);
144 }
145
146 //list 插入和删除
147 void test05()
148 {
149 list<int>L5;
150
151 //尾插
152 L5.push_back(10);
153 L5.push_back(20);
154 L5.push_back(30);
155
156
157 //头插
158 L5.push_front(100);
159 L5.push_front(200);
160 L5.push_front(300);
161
162 // 300 200 100 10 20 30
163 printList2(L5);
164
165 //尾删
166 L5.pop_back();
167 //300 200 100 10 20
168 printList2(L5);
169
170 L5.pop_front();
171 printList2(L5);
172 //200 100 10 20
173
174 //insert插入
175 L5.insert(L5.begin(),888);
176 //888 200 100 10 20
177 printList2(L5);
178
179 list<int>::iterator it = L5.begin();
180 L5.insert(++it, 9999);
181 //888 9999 200 100 10 20
182 printList2(L5);
183
184 //删除
185 it = L5.begin();
186 L5.erase(it);
187 //9999 200 100 10 20
188 printList2(L5);
189
190 it = L5.begin();
191 L5.erase(++it);
192 //9999 100 10 20
193 printList2(L5);
194
195
196 L5.push_back(66666);
197 L5.push_back(66666);
198 L5.push_back(66666);
199 L5.push_back(66666);
200 L5.push_back(66666);
201 //9999 100 10 20 66666 66666 66666 66666 66666
202 printList2(L5);
203
204
205
206 //移除 remove
207 L5.remove(66666);
208 printList2(L5);
209 //9999 100 10 20
210
211
212 //清空
213 L5.clear();
214 printList2(L5);
215
216 }
217 //list数据存取
218 void test06()
219 {
220 list<int>L6;
221
222 L6.push_back(10);
223 L6.push_back(20);
224 L6.push_back(30);
225 L6.push_back(40);
226
227 //L6[0] 不可以用[]访问list容器中的元素
228
229 //L6.at(0); 不可以用at方式访问list容器中的元素
230
231 //原始是 list本质是链表 不是用连续线性空间储存数据 迭代器也是不支持随机访问的
232
233
234 cout << "第一个元素为: " << L6.front() << endl;
235 cout << "最后一给元素为: " << L6.back() << endl;
236
237 //验证迭代是不支持随机访问的
238 list<int>::iterator it = L6.begin();
239
240 it++;
241 //it--;
242 //支持双向
243 //it = it + 1; //不支持
244
245
246 }
247
248 //list 反转和排序
249 void test07()
250 {
251 list<int>L7;
252 L7.push_back(25);
253 L7.push_back(15);
254 L7.push_back(95);
255 L7.push_back(55);
256 L7.push_back(85);
257
258 printList2(L7);
259
260 cout << "反转后: " << endl;
261 L7.reverse();
262 printList2(L7);
263
264
265
266 }
267 bool myCompare(int v1 ,int v2)
268 {
269 //降序 就让第一个数 > 第二个数
270 return v1 > v2;
271 }
272 //排序
273 void test08()
274 {
275 list<int>L7;
276 L7.push_back(25);
277 L7.push_back(15);
278 L7.push_back(95);
279 L7.push_back(55);
280 L7.push_back(85);
281
282 //排序
283 cout << "排序前: " << endl;
284 printList2(L7);
285
286 //所有不支持随机访问迭代器的容器,不可以使用标准算法
287 //不支持随机访问的迭代器的容器,内部会提供对应一些算法
288 //sort(L7.begin(), L7.end());
289
290 L7.sort(); //默认从小到大 升序
291 cout << "升序排序后: " << endl;
292 printList2(L7);
293
294 //降序
295 cout << "降序排序后: " << endl;
296 L7.sort(myCompare);
297 printList2(L7);
298 }
299
300
301 int main()
302 {
303
304 //test01();
305 //test02();
306 //test03();
307 //test04();
308
309 // test05();
310
311 //test06();
312
313 test07();
314 test08();
315 system("pause");
316 return 0;
317 }

C++ //list容器 构造函数 //list赋值和交换 //list容器大小操作 //list插入和删除,移除 //清空 //list数据存取back(); front() //list 反转和排序的更多相关文章

  1. cb14a_c++_顺序容器的操作7_赋值与交换(swap)_vector转list

    cb14a_c++_顺序容器的操作7_赋值与交换(swap) vector数据赋值给list, slist.assign(svec.begin(), svec.end());//这样可以转 svec- ...

  2. OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)

    当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内.如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义 在编译时进行名字查找: 一个对象.引用或指针的 ...

  3. [c++基础]3/5原则--拷贝构造函数+拷贝赋值操作符

    /* * main.cpp * * Created on: Apr 7, 2016 * Author: lizhen */ #include <iostream> #include &qu ...

  4. C++类中函数(构造函数、析构函数、拷贝构造函数、赋值构造函数)

    [1]为什么空类可以创建对象呢? 示例代码如下: #include <iostream> using namespace std; class Empty { }; void main() ...

  5. C++学习基础六——复制构造函数和赋值操作符

    1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...

  6. 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)

    注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...

  7. C++复制构造函数和赋值符的区别

    From  http://blog.csdn.net/randyjiawenjie/article/details/6666937 非常感谢原作者分享. class CTest{public: CTe ...

  8. C++中的构造函数,拷贝构造函数和赋值运算

    关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...

  9. 关于C++中的拷贝构造函数和赋值函数

    如果类定义的数据成员中存在指针或引用,那么最好重载这两个函数. 1.     定义 拷贝构造函数的定义格式:构造函数名(const 源类名& 引用对象形参名){} 赋值函数定义格式:源类名 & ...

  10. c++ 复制构造函数和赋值函数

    c++ 自动提供了下面这些成员函数 1默认构造函数 2.复制构造函数 3.赋值操作符 4.默认析构函数 5.地址操作符 赋值构造函数copy construtor 用于将一个对象复制到新创建的对象中, ...

随机推荐

  1. MySQL 索引与性能调优

    索引用于快速找出在某个列中有一特定值的行,如果不使用索引MySQL必须从第l条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,MySQL能快速到达某 ...

  2. LyScriptTools 调试控制类API接口手册

    LyScriptTools模块中的DebugControl类主要负责控制x64dbg调试器的行为,例如获取或设置寄存器组,执行单步命令等,此类内的方法也是最常用的. 插件地址:https://gith ...

  3. CE修改器入门:寻找指针基址

    上一步阐述了如何使用代码替换功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,所以我们需要学习如何利用指针,在本关的 Tutorial.exe 窗口下面有两个按钮,一个会改变数值,另一个不 ...

  4. Python 代码推送百度链接

    通过代码实现抓取个人博客中某一页指定文章链接,并批量将该链接推送到百度站长平台,起到快速收录的目的. import sys import requests from bs4 import Beauti ...

  5. 基于.NET三维控件的个性化管道软件开发

    1 简介 管道广泛用于化工.工厂.建筑.市政等方面,关系到国计民生.虽然管道设计软件种类繁多,有的也非常强大(然而也非常昂贵),但也并不能完全满足个性化需要. 如何快速开发一款满足自己需求的三维管道设 ...

  6. Mac基于VMware安装CentOS

    流程偏长,下一步根本点不完: 01 首先,明确下两款软件的版本信息: VMware是[VMware-Fusion-13.5.0] CentOS是[CentOS-7-x86_64-Minimal-190 ...

  7. 设计模式 - 创建型模式 - 单例模式(C++)

    1.前言 单例模式属于创建型模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方 ...

  8. 轻量级按键动作识别模块(C语言)

    1.前言 继嵌入式(单片机)裸机 C 语言开发 + 按键扫描(模块分层/非阻塞式)文章后,原来的按键识别基本能满足大部分需求,但是对于双击和多击等多样化的功能需求并不能满足,因此对整个按键动作识别模块 ...

  9. 小知识:RHEL7上设置Keepalived日志重定向

    1.配置 /etc/sysconfig/keepalived 文件 2.添加keepalived日志保存位置的配置 3.修改 /lib/systemd/system/keepalived.servic ...

  10. 【.net core学习一】.net 5.0 webapi部署

    服务器:windows server 2012 x64 1.安装IIS: 2.下载并安装 dotnet-hosting-5.0.13-win.exe 下载地址: https://dotnet.micr ...