C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素
01昨天课程回顾
02函数对象适配器
函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征。因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候就需要函数适配器来为我们的函数进行适配。
使用方法:
第一步 让函数对象
1 绑定器适配器
作用: 可以动态改变函数对象的一个参数,不用生成多个函数对象
2. 取反适配器
作用:改变函数谓词(返回值为bool的函数对象)的返回状态//true改为false false改为true
3. 普通函数适配器
作用:将普通函数当作函数对象处理,使之可以传入参数
4. 成员函数适配器
作用:
03常用遍历算法
for_each(iterator beg,iterator end,_callback)
transform:
transform 第一种情况: 一个容器种的元素经过运算 把结果放进目标容器中(b2)
第二种情况:两个容器进行运算,把结果放到第三个容器中。
4 常用 查找算法
- 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_逆序遍历_修改容器元素的更多相关文章
- python列表和字符串的三种逆序遍历方式
python列表和字符串的三种逆序遍历方式 列表的逆序遍历 a = [1,3,6,8,9] print("通过下标逆序遍历1:") for i in a[::-1]: print( ...
- C++ STL 之 函数对象适配器
谓词是指普通函数或重载的 operator()返回值是 bool 类型的函数对象(仿函数).如果operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断 ...
- 【实习记】2014-08-15文档太少看着源码用cgicc+stl库之模板谓词函数对象
总结1: 今天找到了昨天scanf的问题答案,scanf与printf一样的神奇而复杂,稍不留神,就会被坑.scanf函数在读入非空白符分割的多个字符串的解决方法是这个:/* 以 | 分割 * ...
- C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器
01 上次课程回顾 昨天讲了三个容器 string string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...
- STL算法设计理念 - 函数对象和函数对象当参数和返回值
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...
- STL 算法中函数对象和谓词
STL 算法中函数对象和谓词 函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特 ...
- STL算法设计理念 - 函数对象和函数对象当參数和返回值
函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...
- STL算法中函数对象和谓词
函数对象和谓词定义 函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列 ...
- STL_iterator迭代器(3)——函数和函数对象
STL中,函数被称为算法,也就是说它们和标准C库函数相比,它们更为通用.STL算法通过重载operator()函数实现为模板类或模板函数.这些类用于创建函数对象,对容器中的数据进行各种各样的操作.下面 ...
随机推荐
- ACDream - Crayon
题目: Description There are only one case in each input file, the first line is a integer N (N ≤ 1,000 ...
- CodeForces - 9B - Running Student
先上题目: B. Running Student time limit per test 1 second memory limit per test 64 megabytes And again ...
- POJ 3678
这道题唯一一个注意的地方是,如出现X\/Y=0这种关系时,X=0,Y=0.已经是可以肯定的关系了,所以可以连边X->-X. 我也错了上面这地方.看来,还不够.以后要细心才好. #include ...
- [React] Update Application State with React Apollo ApolloConsumer Component
In this lesson I refactor some code that utilizes the Mutation component to update client-side cache ...
- 开发,从需求出发 · 之四 春天在这里
首先,我要大字标语表达立场: 你所使用的framework & non-core features,就跟女人穿在身上的衣服一样,越少越好! watermark/2/text/aHR0cDovL ...
- php简单的连接数据库
<?php $conn=@mysql_connect("localhost","root","") or die ("no& ...
- oracel表的分区
1,创建表及分区 create table test ( ID VARCHAR2(32), MONTHS VARCHAR2(40), USERID VARCHAR2(20) ) partition b ...
- B1970 [Ahoi2005]Code 矿藏编码 暴力模拟
小詹从哪整出来这么多水题?%%%这个题用栈模拟一下,然后直接暴力就行了...一开始还没想到,用的dfs,我太菜了... 题干: Description 依次对每份进行编码,得S1,S2,S3,S4.该 ...
- 23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等
来源:全球人工智能 作者:SFLYQ 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.Wec ...
- 使用eclipse,对spring boot 进行springloader或者devtool热部署失败处理方法
确定配置进行依赖和配置没有错误后. 调整spring boot 的版本,因为新版本对老版本的spring boot 不能使用. 改为: <groupId>org.springframewo ...