STL---llist
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b;
}; void func(Node &t)
{
cout << t.a << " " << t.b << "\n"; //使用换行,尽量使用\n,endl的效率会慢很多
//这里只会打印结构体中的b 因为对于int了类型的0可以直接打印,对于char类型的0,他会找到0对应的assic码,而0对应的assci码无法在控制台打印
cout << "强制转换 " << (int)t.a << "\n";
}
int main()
{
list<Node> li; //无参构造 list<Node> li1(); //结构体重的元素被初始化为0
for_each(li1.begin(), li1.end(), func); return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b;
}; void func(Node &t)
{
cout << t.b << " " << t.a << "\n";
}
int main()
{ Node node = { 'a', };
list<Node> li(, node);
for_each(li.begin(), li.end(), func); cout << "***************************************\n";
list<Node> li2(li);
for_each(li2.begin(), li2.end(), func); cout << "***************************************\n";
list<Node> li3(li.begin(),li.end());
for_each(li3.begin(), li3.end(), func); list<Node>::iterator ite = li3.begin();
while (ite != li3.end())
{
cout << ite->a << " " << ite->b << "\n";
ite++;
}
return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b;
}; void func(Node &item)
{
cout << item.a << " " << item.b << "\n";
}
int main()
{
Node node = { 'a', };
list<Node> li(, node);
cout << "list中有多少个元素: " << li.size() << "\n";
cout << "这个list是否为空 " << li.empty() << "\n";
for_each(li.begin(), li.end(), func); cout << "************************************************\n";
li.resize();
for_each(li.begin(), li.end(), func);
cout << "经过resize改变后的容量: " << li.size() << "\n";
cout << "这个list是否为空 " << li.empty() << "\n"; cout << "************************************************\n";
li.resize();
for_each(li.begin(), li.end(), func);
cout << "这个list是否为空 " << li.empty() << "\n"; return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b; Node(char c, int d)
{
a = c;
b = d;
}
}; void func(Node &t)
{
cout << t.a << " " << t.b << "\n";
}
int main()
{
Node node('a', ); //挡结构体中有初始化函数,要像使用类一样去定义这个结构体变量
list<Node> li(, node); li.push_back(Node('b', )); //输入元素
li.push_front(Node('c', )); cout << "li.front a " << li.front().a << "\n"; //输出元素
cout << "li.back a " << li.back().a << "\n"; //在中间添加元素
list<Node>::iterator ite = li.begin();
ite++;
li.insert(ite, Node('d', )); //第一个参数是一个迭代器,第二个参数是要插入的节点元素
li.insert(ite, , Node('e', )); //插入三个相同的元素 for_each(li.begin(), li.end(), func); return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b; Node(char c, int d)
{
a = c;
b = d;
} bool operator == (const Node& t) //要使用list中的remove函数就必须重载这个函数
{
if ((t.a == this->a) && (t.b == this->b))
{
return true;
}
else
{
return false;
}
}
}; void func(Node &t)
{
cout << t.a << " " << t.b << "\n";
}
int main()
{
list<Node> li;
li.push_back(Node('a', ));
li.push_back(Node('b', ));
li.push_back(Node('c', ));
li.push_back(Node('d', ));
li.push_back(Node('e', ));
li.push_back(Node('d', )); //li.pop_back(); //尾删除
//li.pop_front(); //头删除 list<Node>::iterator ite = li.begin();
ite++;
li.erase(ite); //删除一个指定的元素
//这个函数里面还可以放两个迭代器,表示删除这一段元素 li.remove(Node('e', )); //当这个list中有与之一致的结点就删除这个结点,有多个的情况下就删除多个
li.unique(); //去重 li.assign(, Node('a', )); //重新赋值
//这个函数还可以传入两个迭代器,表示用迭代器中间的元素来重新赋值这个list对象 for_each(li.begin(), li.end(), func); return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b; Node(char c, int d)
{
a = c;
b = d;
} bool operator < (const Node& t) //使用sort函数,要重载<
{
if ( t.b < this->b)
{
return true;
}
else
{
return false;
}
}
}; void func(Node &t)
{
cout << t.a << " " << t.b << "\n";
}
int main()
{
list<Node> li;
list<Node> li1;
li.push_back(Node('a', ));
li.push_back(Node('b', ));
li.push_back(Node('c', ));
li1.push_back(Node('d', ));
li1.push_back(Node('f', ));
li1.push_back(Node('e', )); li.swap(li1); //交换连个list对象 li.reverse(); //翻转这个list对象中的元素 li.sort(); //排序
for_each(li.begin(), li.end(), func); return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b; Node(char c, int d)
{
a = c;
b = d;
} bool operator < (const Node& t)
{
if ( t.b > this->b) //从小到大
{
return true;
}
else
{
return false;
}
}
}; void func(Node &t)
{
cout << t.a << " " << t.b << "\n";
}
int main()
{
list<Node> li;
list<Node> li1;
li.push_back(Node('a', ));
li.push_back(Node('b', ));
li.push_back(Node('c', ));
li1.push_back(Node('d', ));
li1.push_back(Node('e', ));
li1.push_back(Node('f', )); li.merge(li1); //排序函数需要注意几观点
//首先排序前 这两个list必须有序,且有序味相同性质(都是从小到大或者都是从大到小)
//当按照你设置的规则排序两个从小到大的list的时候,注意上面的重载
//当排序的list是从大到小的时候,就需要需要将上面的重载改变一下(改成相反的)
for_each(li.begin(), li.end(), func); return ;
}
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
struct Node
{
char a;
int b; Node(char c, int d)
{
a = c;
b = d;
} bool operator == (const Node t)
{
if ((t.a == this->a) && (t.b == this->b))
{
return true;
}
else
{
return false;
}
} }; void func(Node &t)
{
cout << t.a << " " << t.b << "\n";
}
int main()
{
list<Node> li;
li.push_back(Node('a', ));
li.push_back(Node('b', ));
li.push_back(Node('c', ));
li.push_back(Node('d', ));
li.push_back(Node('e', ));
li.push_back(Node('f', )); list<Node>::iterator ite = find(li.begin(), li.end(), Node('c', ));
cout << ite->a << " " <<ite->b << "\n"; //foreard_list 单向队列,有兴趣可以自行百度 return ;
}
STL---llist的更多相关文章
- 详细解说 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++标准库 ...
随机推荐
- 使用NSURLConnection实现大文件断点下载
使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...
- Realtek无线网卡对于Ubuntu的WiFi不支持的处理办法
1.应急办法:查询rfkill list all,可以看到ideapad_laptop的无线被物理关闭,可是博主的笔记本根本没这个键位,所以执行sudo modprobe -r ideapad_lap ...
- 自开发Web应用和SAP Customer Data Cloud Identity服务的集成
今天的文章继续由SAP成都研究院的云时代女王,Aviva给大家分享关于SAP Customer Data Cloud的一些使用经验. Aviva之前的文章可以在本文末尾处获得. 下面是她的正文. 大家 ...
- Sqlserver2008+搜索型注入技术
简单的判断搜索型注入漏洞存在不存在的办法是先搜索',如果出错,说明90%存在这个漏洞.然后搜索%,如果正常返回,说明95%有洞了. 然后再搜索一个关键字,比如2006吧,正常返回所有2006相关的信息 ...
- phoneGap的Android下编写phonegap 插件
一. javascript 端的编写 第一个参数 成功的回调函数 第二个参数 失败的回调函数 第三个参数 是插件的类名称,也就是后台java文件的类名 第四个参数 执行的 action 名称 ...
- HDOJ 1528 Card Game Cheater
版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss https://blog.csdn.net/u012797220/article/details/3 ...
- Kali-linux测试网络范围
测试网络范围内的IP地址或域名也是渗透测试的一个重要部分.通过测试网络范围内的IP地址或域名,确定是否有人入侵自己的网络中并损害系统.不少单位选择仅对局部IP基础架构进行渗透测试,但从现在的安全形势来 ...
- if __name__ == "__main__"如何正确理解
粗略来讲,__name__是当前模块,当模块被直接运行时模块名为__main__.这句话的意思是,当模块被直接执行时,代码将运行,当模块是被导入时,代码不被运行 例如,执行one.py # file ...
- 如果将自己的项目共享到github上
1:创建仓库 点击New repository创建仓库.Git上仓库就相当于项目的意思 创建仓库名(repository) 创建成功后得到自己的github地址 2:在eclipse中创建自己的项目 ...
- Xcode7解决VVDocumenter 不能使用的方案
Xcode7解决VVDocumenter 不能使用的方案 VVDocumenter-Xcode是Xcode上一款快速添加标准注释,并可以自动生成文档的插件.有了VVDocumenter-Xcode,规 ...