cb35a_c++_STL_算法_for_each
cb35a_c++_STL_算法_for_each
for_each(b,e,p)
使用for_each()算法遍历数据
使用for_each()和函数对象修改数据
使用for_each()的返回值
//转换函数operator double()
//参考:https://www.cnblogs.com/txwtech/p/12115391.html
//static_cast<double>强制类型转换:
MeanValue mv=for_each(ivec.begin(), ivec.end(), MeanValue());//for_each的返回值给到mv,mv里面保留了 num与sum的结果。
cout << "平均值:" << mv.value() << endl;
double result= for_each(ivec.begin(), ivec.end(), MeanValue());
//for_each的返回值给到result,result定义为了doubule,它自动调用类型转换函数operator double()
cout << "平均值2:" << result << endl;
/*cb35a_c++_STL_算法_for_each for_each(b,e,p)
使用for_each()算法遍历数据
使用for_each()和函数对象修改数据
使用for_each()的返回值 //转换函数operator double()
//参考:https://www.cnblogs.com/txwtech/p/12115391.html
//static_cast<double>强制类型转换: MeanValue mv=for_each(ivec.begin(), ivec.end(), MeanValue());//for_each的返回值给到mv,mv里面保留了 num与sum的结果。
cout << "平均值:" << mv.value() << endl; double result= for_each(ivec.begin(), ivec.end(), MeanValue());
//for_each的返回值给到result,result定义为了doubule,它自动调用类型转换函数operator double()
cout << "平均值2:" << result << endl; */ #include <iostream>
#include <algorithm>
#include <vector>
using namespace std; void print(int elem)
{
cout << elem << ' ';
}
template<class T>
class AddValue
{
private:
T theValue;
public:
AddValue(const T& v) :theValue(v) {}
void operator()(T& elem) const
{
elem += theValue;
}
};
class MeanValue
{
private:
long num;
long sum;
public:
MeanValue() :num(), sum() {}
void operator()(int elem)//operator就是函数对象
{
num++;
sum += elem;
}
double value()
{
return static_cast<double>(sum) / static_cast<double>(num);
//static_cast<double>强制类型转换:
//https://blog.csdn.net/txwtech/article/details/104148011
} //类型转换函数operator double(),double运算符重载
//参考:https://www.cnblogs.com/txwtech/p/12115391.html
operator double()
{
return static_cast<double>(sum) / static_cast<double>(num);
} }; int main()
{
vector<int> ivec;
for (int i = ; i <= ; ++i)
ivec.push_back(i);
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
for_each(ivec.begin(), ivec.end(), AddValue<int>());//函数对象,自动调用operator
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
for_each(ivec.begin(), ivec.end(), AddValue<int>( *ivec.begin()));
for_each(ivec.begin(), ivec.end(), print);
cout << endl;
// MeanValue()是函数对象,返回也是函数对象
MeanValue mv=for_each(ivec.begin(), ivec.end(), MeanValue());//for_each的返回值给到mv,mv里面保留了 num与sum的结果。
cout << "平均值:" << mv.value() << endl; double result= for_each(ivec.begin(), ivec.end(), MeanValue());
//for_each的返回值给到result,result定义为了doubule,它自动调用类型转换函数operator double()
cout << "平均值2:" << result << endl; return ;
}
cb35a_c++_STL_算法_for_each的更多相关文章
- cb51a_c++_STL_算法_根据第n个元素排序nth_element
cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...
- cb50a_c++_STL_算法_局部排序partial_sort
cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,endcout << " ...
- cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort
cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) ...
- cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition
cb48a_c++_STL_算法_重排和分区random_shuffle_stable_partition random_shuffle()//重排,随机重排,打乱顺序 partition()分区,把 ...
- cb47a_c++_STL_算法_排列组合next_prev_permutation
cb47a_c++_STL_算法_排列组合next_prev_permutation 使用前必须先排序.必须是 1,2,3或者3,2,1.否者结果不准确.如果, 1,2,4,6.这样数据不会准确nex ...
- cb46a_c++_STL_算法_逆转和旋转reverse_rotate函数advance
cb46a_c++_STL_算法_逆转和旋转reverse_rotateSTL算法--变序性算法reverse() 逆转reverse_copy()一边复制一般逆转rotate()旋转,某个位置开始前 ...
- cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个.uniqu ...
- cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if
cb44a_c++_STL_算法_删除_(2)remove_copy_remove_copy_if remove_copy()//在复制过程中删除一些数据remove_copy_if() 删除性算法: ...
- cb43a_c++_STL_算法_删除_(1)remove_remove_if
cb43a_c++_STL_算法_删除_(1)remove_remove_ifremove()remove_if() 注意:1.并不是真正的删除,而是把后面的元素向前移动,覆盖被删除元素,元素个数并没 ...
随机推荐
- Oracle 中序列使用
转 https://www.cnblogs.com/21-forever/p/11265924.html 序列: 1.Oracle是不支持自增长的: ①.序列是用于生成唯一.连续序号的对象: ②.序列 ...
- Spring 使用注解对事务控制详解与实例
1.什么是事务 一荣俱荣,一损俱损,很多复杂的操作我们可以把它看成是一个整体,要么同时成功,要么同时失败. 事务的四个特征ACID: 原子性(Atomic):表示组成一个事务的多个数据库的操作的不可分 ...
- mysql事务控制和锁定语句
MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定.默认情况下,表锁和行锁都是自动获得的,不 ...
- Unity实现精灵资源动态加载
private Sprite LoadSourceSprite(string relativePath) { //把资源加载到内存中 UnityEngine.Objec ...
- 面试中很值得聊的二叉树遍历方法——Morris遍历
Morri遍历 通过利用空闲指针的方式,来节省空间.时间复杂度O(N),额外空间复杂度O(1).普通的非递归和递归方法的额外空间和树的高度有关,递归的过程涉及到系统压栈,非递归需要自己申请栈空间,都具 ...
- 【JUC】CyclicBarrier和Semaphore的使用
CyclicBarrier的使用 CyclicBarrier:可以让一组检测到一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有的屏障拦截的线程才会继续执行,线程进入屏障通过Cyclic ...
- 记录我在Docker 中一步一步搭建Mysql 数据库存开发环境
准备在docker下来搭建mysql开发环境玩玩,当作学习笔记.搭建环境是:win10 企业版,docker desktop 19.03.8,mysql 5.7,Windows PowerShell ...
- [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改
上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...
- QueryRunner的添加与查询操作
Apache-DBUtils实现CRUD操作,commmons-dbutils是Apache组织提供的开源JDBC工具类, 封装了针对于数据库的增删改查操作,Class QueryRunner Tes ...
- vue 使用 elementUI 和 antd 的细微差别
Checkbox a-checkbox 没有value属性,绑定用checked Collapse 使用折叠面板的时候,antd 的层级关系是 .ant-collapse >.ant-colla ...