#include <iostream>
#include <list>
#include <algorithm>
using namespace std;

//底层结构是双向链表

struct Node{
int a;
char c;

};

struct Node1{ //重点中的重点
int a;
char c;
Node1(int d,char e)
{
a=d;
c=e;
}
bool operator==(const Node1& i)
{
if(i.a==this->a&&i.c==this->c)
{
return true;
}
return false;
}

bool operator<(const Node1& f)
{
if(this->a<f.a) //if(this->a>f.a) //可以改变> , <
return true;
return false;
}
};

void fun(Node d)
{
cout << d.a << " " << d.c << "\n";
}

void fun1(Node1 d)
{
cout << d.a << " " << d.c << "\n";
}

void listdefine()
{
list<Node> ls;
list<Node> l(5);
Node no={12,'a'};
list<Node> l1(5,no);
list<Node> l2(l1);
list<Node> l3(l2.begin(),l2.end());

list<Node>::iterator ite=l3.begin(); //不可以加数,只可以自加,
ite++; //ite+4; 错误
list<Node>l4(ite,l3.end());

//for_each(l3.begin(),l3.end(),fun);
for_each(l4.begin(),l4.end(),fun);
}

void listsize()
{
Node no={12,'a'};
list<Node> ls(6,no);

cout << ls.size() << endl;

//for_each(ls.begin(),ls.end(),fun);

ls.resize(18); //新扩空间全为0

cout << ls.size() << endl;

for_each(ls.begin(),ls.end(),fun);

ls.resize(3);

cout << ls.size() << endl;

//cout << ls.empty() << endl;

ls.resize(0);

//cout << ls.empty() << endl;
}

void list_put_increase()
{
//Node no={12,'a'};
//list<Node> ls(5,no);

//输出:循环,迭代器,for_each(不支持下标运算
/*
for(list<Node>::iterator ite=ls.begin();ite!=ls.end();ite++)
{
cout << ite->a << " " << ite->c << endl;
}
*/
//cout << ls.back().a << " " << ls.back().c << endl;
//cout << ls.front().a << " " << ls.front().c << endl;
//list<Node> l1;
//ls.push_front(no);
//for_each(ls.begin(),ls.end(),fun);
list<Node1> li;
li.push_front(Node1(12,'a')); //头添加
li.push_back(Node1(13,'b')); //尾添加
list<Node1>::iterator ite=li.begin();
ite++;
li.insert(ite,Node1(15,'c'));
ite--;
li.insert(ite,3,Node1(16,'d'));
cout << ite->a << endl;

for_each(li.begin(),li.end(),fun1);
}

void list_delete_modification()//
{
list<Node1> ls;
ls.push_front(Node1(12,'a'));
ls.push_back(Node1(13,'b'));
list<Node1>::iterator ite=ls.begin();
ls.insert(++ite,3,Node1(14,'c'));

for_each(ls.begin(),ls.end(),fun1);

//ls.pop_back(); //尾删除
//ls.pop_front(); //头删除
//ls.erase(ls.begin(),--ls.end()); //选位删除
//ls.clear(); //清空
//ls.unique(); //去重

//ls.assign(3,Node1(11,'x')); //重新赋值
ls.begin()->a=(--ls.end())->a; //改
//还可以用迭代器

for_each(ls.begin(),ls.end(),fun1);
}

void list_merge()
{
list<Node1> ls;
ls.push_front(Node1(12,'a'));
ls.push_back(Node1(13,'b'));
ls.insert(++ls.begin(),3,Node1(14,'c'));

list<Node1> ls1;
ls1.push_front(Node1(1,'x'));
ls1.push_front(Node1(25,'y'));
ls1.push_back(Node1(3,'z'));
ls.merge(ls1); //合并

//ls1.swap(ls); //交换

//ls.reverse(); //倒序 //reserve

//ls.sort(); //从小到大

//ls.splice(); //拼接

list<Node1>::iterator ite=find(ls.begin(),ls.end(),Node1(12,'a')); //find需要重载==号 Node1(12,'f')也不影响
cout << ite->a << " " << ite->c << endl;

for_each(ls.begin(),ls.end(),fun1);
}

int main()
{
//listdefine();
//listsize();
//list_put_increase();
//list_delete_modification();
//list_merge();
return 0;
}

/*
与vector的区别:
随机访问慢,也支持下标,快速插入删除

forward_list容器,2011年以后的编译器可用,更快,无size函数

*/

stl_list复习的更多相关文章

  1. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  2. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  3. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

  4. 复习(1)【Maven】

    终于开始复习旧知识了,有输入必然要有输出.输入和输出之间的内化过程尤为重要,在复习的同时,真正把学到的东西积淀下来,加深理解. Maven项目概念与配置 Maven是一个项目管理和综合工具.Maven ...

  5. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  6. JS复习--更新结束

    js复习-01---03 一 JS简介 1,文档对象模型 2,浏览器对象模型 二 在HTML中使用JS 1,在html中使用<script></script>标签 2,引入外部 ...

  7. jQuery 复习

    jQuery 复习 基础知识 1, window.onload $(function(){});   $(document).ready(function(){}); 只执行函数体重的最后一个方法,事 ...

  8. jQuery5~7章笔记 和 1~3章的复习笔记

    JQery-05 对表单和表格的操作及其的应用 JQery-06 jQuery和ajax的应用 JQery-07 jQuery插件的使用和写法 JQery-01-03 复习 之前手写的笔记.实在懒得再 ...

  9. HTML和CSS的复习总结

    HTML(Hypertext Markup Language)超文本标记语言:其核心就是各种标记!<html> HTML页面中的所有内容,都在该标签之内:它主要含<head>和 ...

随机推荐

  1. JS点击显示隐藏内容

    JS点击显示隐藏密码 思路:获取元素,判断点击,如果DIV显示就隐藏,如果DIV隐藏就显示出来. 1 if(DIV是显示的){ 2 div.style.display='none'; 3 } 4 el ...

  2. 2.2 logistic回归损失函数(非常重要,深入理解)

    上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的, ...

  3. maskrcnn实现.md

    mask rcnn学习 Mask R-CNN实现(https://engineering.matterport.com/splash-of-color-instance-segmentation-wi ...

  4. 在电竞圈想摧枯拉朽的AI,到底能带来什么?

    2019ChinaJoy,似乎并没有让这个暑期彻底燃动起来.在业界和玩家看来,2019ChinaJoy亮点匮乏.饱受诟病.不过细心观察的话,能够发现一个特殊现象--AI取代此前猎艳性质的cosplay ...

  5. IDEA格式化代码快捷键失灵原因

    网易云音乐快捷键与IDEA快捷键冲突了!!!!!!!坑爹

  6. jmeter+influxdb+granfana+collectd监控cpu+mem+TPS

    1.安装grafana #####gafana过期安装包安装报错 Error unpacking rpm package grafana-5.1.4-1.x86_64error: unpacking ...

  7. 自定义ViewPager,避免左右滑动时与水平滑动控件冲突

    import android.content.Context;import android.support.v4.view.ViewPager;import android.util.Attribut ...

  8. c#修改项目名称

    1.修改解决方案名称 右键,重命名 2.修改项目名称 右键,重命名 3.修改程序集名称和默认命名空间 项目,属性 4.替换解决方案中的名称 编辑,替换,替换范围默认整个解决方案 5.用记事本打开.sl ...

  9. 并发编程之CyclicBarrier

    栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生.栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行.闭锁用于等待事件,而栅栏用于等待其他线程. CyclicBarrier可以使 ...

  10. MySQL 学习(三)事务学习

    事务隔离级别     SQL标准的事务隔离级别包括:读未提交(read uncommitted).读提交(read committed).可重复读(repeatable read)和串行化(seria ...