01昨天课程回顾

02函数对象适配器

函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征。因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候就需要函数适配器来为我们的函数进行适配。

使用方法:

第一步 让函数对象

1 绑定器适配器

作用: 可以动态改变函数对象的一个参数,不用生成多个函数对象

2. 取反适配器

作用:改变函数谓词(返回值为bool的函数对象)的返回状态//true改为false  false改为true

3. 普通函数适配器

作用:将普通函数当作函数对象处理,使之可以传入参数

4. 成员函数适配器

作用:

03常用遍历算法

for_each(iterator beg,iterator end,_callback)

transform:

transform 第一种情况: 一个容器种的元素经过运算 把结果放进目标容器中(b2)

第二种情况:两个容器进行运算,把结果放到第三个容器中。

4 常用 查找算法

  1. find算法:

查找为相同值的第一个元素

void test01() {

vector<int> v;

v.push_back(8);

v.push_back(2);

v.push_back(5);

v.push_back(6);

vector<int>::iterator pos = find(v.begin(), v.end(), 5);

if (pos == v.end()) {

cout << "没有找到!" << endl;

}

else {

cout << "找到了:" << *pos << endl;

}

}

2.find_if算法:

查找是否有这个值

class mycompare03 {

public:

bool operator()(int v) {

return v > 2;

}

};

void test03() {

vector <int> v;

v.push_back(8);

v.push_back(2);

v.push_back(5);

v.push_back(6);

/*

*/

vector<int>::iterator pos = find_if(v.begin(), v.end(), mycompare03());

if (pos == v.end()) {

cout << "没有找到!" << endl;

}

else {

cout << "找到了:" << *pos << endl;

}

}

查找对象:

需要重写== 方法:

class student {

public:

student(int id, int age) :id(id), age(age) {};

int id;

int age;

bool operator==(const student& s) {

if (this->id == s.id && this->age == s.age) {

return true;

}

else

{

return false;

}

//return this->id == s.id && this->age == s.age;

}

};

void test02() {

vector<student> v;

student s1(1, 2), s2(3, 4), s3(5, 6);

v.push_back(s1);

v.push_back(s2);

v.push_back(s3);

vector<student>::iterator pos = find(v.begin(), v.end(), s1);

if (pos != v.end()) {

cout << "找到:" << pos->id << " " << pos->age << endl;

}

else {

cout << "没有找到!" << endl;

}

}

3.adjacent_find算法:

查找相邻的相同值元素 返回第一个元素的位置:

void test04() {

vector <int> v;

v.push_back(8);

v.push_back(2);

v.push_back(2);

v.push_back(5);

v.push_back(6);

vector<int>::iterator pos =  adjacent_find(v.begin(),v.end());

if (pos == v.end())

{

cout << "没有找到" << endl;

}

else {

cout << "找到:" << *pos << endl;

}

}

4.binary_search

二分查找法:

需要原容器进行好排序

void test05() {

// binary_search需要对有序的元素进行查找

vector <int> v;

v.push_back(8);

v.push_back(2);

v.push_back(2);

v.push_back(5);

v.push_back(6);

sort(v.begin(), v.end()); // 排序

bool flag = binary_search(v.begin(), v.end(), 5);

if (flag) {

cout << "查找到!" << endl;

}

else {

cout << "没有查找到!" << endl;

}

}

5.count 算法 count_if算法

// count count_if

class mycompare06{

public:

bool operator()(int v) {

return v > 2;

}

};

void test06() {

vector <int> v;

v.push_back(8);

v.push_back(2);

v.push_back(2);

v.push_back(5);

v.push_back(6);

// count算法

int n = count(v.begin(), v.end(), 2);

cout << "n:" << n << endl;

// count_if

n = count_if(v.begin(), v.end(), mycompare06());

cout << "n:" << n << endl;

};

05常用排序算法

排序算法:需要容器支持随机访问

list不支持随机访问 所以list内部有一个自己的sort

merge

merge函数的作用是:将两个有序的序列合并为一个有序的序列

sort

random_shuffle

reverse

06常用的拷贝和替换算法

copy: 将容器内指定范围的元素拷贝到另一容器中

replace: 将容器内指定范围的旧元素修改为新元素

replace_if: 将容器内指定范围满足条件的元素替换为新元素

swap 交换两个容器的元素

copy:

replace, replace_if:

swap:

07上午课程回顾

08 常用的算术生成算法

accumulate 累加:

(累加完最后加了100)

fill 填充:

09常用的集合算法

求交集:set_intersection

求并集:set_union

求差集:set_difference

10 distance_逆序遍历_修改容器元素(补充)

distance 求两个迭代器之间的距离

for_each修改容器元素的值

for_each逆向遍历

11 演讲比赛思路

12演讲比赛框架搭建

13演讲比赛实现

14课程总体回顾

C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素的更多相关文章

  1. python列表和字符串的三种逆序遍历方式

    python列表和字符串的三种逆序遍历方式 列表的逆序遍历 a = [1,3,6,8,9] print("通过下标逆序遍历1:") for i in a[::-1]: print( ...

  2. C++ STL 之 函数对象适配器

    谓词是指普通函数或重载的 operator()返回值是 bool 类型的函数对象(仿函数).如果operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断 ...

  3. 【实习记】2014-08-15文档太少看着源码用cgicc+stl库之模板谓词函数对象

        总结1: 今天找到了昨天scanf的问题答案,scanf与printf一样的神奇而复杂,稍不留神,就会被坑.scanf函数在读入非空白符分割的多个字符串的解决方法是这个:/* 以 | 分割 * ...

  4. C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器

    01 上次课程回顾 昨天讲了三个容器 string  string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...

  5. STL算法设计理念 - 函数对象和函数对象当参数和返回值

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...

  6. STL 算法中函数对象和谓词

    STL 算法中函数对象和谓词 函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特 ...

  7. STL算法设计理念 - 函数对象和函数对象当參数和返回值

    函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...

  8. STL算法中函数对象和谓词

    函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列 ...

  9. STL_iterator迭代器(3)——函数和函数对象

    STL中,函数被称为算法,也就是说它们和标准C库函数相比,它们更为通用.STL算法通过重载operator()函数实现为模板类或模板函数.这些类用于创建函数对象,对容器中的数据进行各种各样的操作.下面 ...

随机推荐

  1. Ubuntu 14.04远程登录服务器

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51285545 本文讲述在Ubuntu ...

  2. Spring MVC-Hello World示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_hello_world_example.htm 说明:示例基于Spring MVC ...

  3. [CSS3] :empty Selector

    When the element has empty content, you might want to display some text to idicate the compoent is l ...

  4. UVA 10025(数学)

     The ? 1 ? 2 ? ... ? n = k problem  The problem Given the following formula, one can set operators ' ...

  5. gephi——怎样上传节点表格而且为节点设定颜色类型

    使用gephi过程中出现两个问题: 一.节点编号不安给定的属性(Nodes)编号,而是莫名其妙地从1w+開始 解决:数据列名中需包括 id.则默觉得节点编号 二.怎样在上传的数据中指定节点颜色 须要一 ...

  6. session 的工作原理

    session.cookie_domain session.cookie_path session.name session.save_path session.use_cokies session_ ...

  7. 兼容chrome和ie的音乐播放

    兼容chrome和ie的音乐播放(Ie7 Ie8 Ie9 均測试过 ) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  8. 国内物联网平台初探(六) ——庆科云FogCloud

    平台定位 FogCloud 快速接入智能硬件 FogCloud为开发者提供便捷的智能硬件接入服务,真正实现敏捷开发,快速迭代. FogCloud提供功能强大的云端服务 包括 产品/APP管理 ,消息通 ...

  9. JXOI2019 退役记

    day0 考前一天在机房和RyeCatcher,还有高一数竞大佬wyt一起颓三国杀,被深深吸引无法自拔,所谓大考大浪,也算是缓解缓解压力 刷刷空间发现好多外地OIer都赶到江科了,萌生出去见一见我江西 ...

  10. Hdu-5983 2016ACM/ICPC亚洲区青岛站 B.Pocket Cube 模拟

    题面 题意:给你一个2*2的魔方,给你每个面每个小块的颜色,一共24个,然后问你能否在一步之内还原. 题解:手动在纸上画,推出每种变化对应的置换,显然,一共有6种,而且可以当成3种,(具体哪3种,就是 ...