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++标准库 ...
随机推荐
- Spring学习之-各注解的含义总结
注解配置 @ComponentScan("spittr.web"):/在加载Spring上下文时,会扫描spittr.web包查找组件 @ComponentScan注解扫描的组件有 ...
- ignore_user_abort函数制定计划任务
PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ignore_user_abort()函数的作用与用法. ...
- soapui使用。简单测试+测试套+负载测试。
http://www.cnblogs.com/zerotest/tag/soapui/
- ZT 针对接口编程而不是针对实现编程
java中继承用extends 实现接口用 implements 针对接口编程而不是针对实现编程 2009-01-08 10:23 zhangrun_gz | 分类:其他编程语言 老听说这句,不知道到 ...
- 1100 final standings
http://acm.timus.ru/problem.aspx?space=1&num=1100 link to the problem make a fast stable sorting ...
- angular中ngOnChanges与组件变化检测的关系
1.ngOnChanges只有在输入值改变的时候才会触发,如果输入值(@Input)是一个对象,改变对象内的属性的话是不会触发ngOnChanges的. 2.组件的变化检测: 2a.changeDet ...
- AtomicInteger线程安全的计数器
在多线程环境下计数的时候,++i和i++是不安全的,故而需要加锁机制,也可以使用volatile关键字进行修饰,但是更简单有效的方式是使用Atomic类
- 蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解
一直搞不太清楚蓝牙BLE协议,不知道LL层和L2CAP层是如何划分的,后来博士给我讲了讲就理解了,写下来,做个记录: 1. 我们知道,除了蓝牙5.1新出的CTE,所有的BLE都是如下类型的包: 对于连 ...
- asp.net mvc 如何在View中获取Url参数的值
如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3 这时想在 ...
- C# abstract,virtual 修饰符
abstract(抽象):该abstract修饰符指示要修改的东西有缺失或不完整的实现.abstract修饰符可以与类,方法,属性,索引器和事件一起使用.abstract在类声明中使用修饰符来指示类仅 ...