C++STL 中的容器整体/逐元素操作方法 少写80%for循环
本文中示例代码默认已引用 std 命名空间
累加 (std::accumulate)
accumulate(begin, end, init, op)
返回给定区间内元素的累加值与给定初值的和,初值不可省略
可指定求和运算,默认为std::plus
vector<int>vec = {1, 2, 3, 4};
cout<<accumulate(vec.begin(), vec.end(), 0);
//累加, 输出: 10
cout<<accumulate(vec.begin(), vec.end(), 1, bit_xor<int>());
//异或和,输出: 5
运算操作函数对象见 functional 头文件,常用如下
| 函数对象 | 含义 |
|---|---|
| multiplies | 乘法 |
| bit_xor | 按位异或 |
| bit_and | 按位与 |
前缀和 (std::partial_sum)
partial_sum(begin, end, res)
计算给定区间的前缀和,存入res (iterator)中,可以直接存入原容器
int a[5] = {1, 2, 3, 4, 5};
partial_sum(a, a+5, a);
// a : {1, 3, 6, 10, 15}
递增填充 (std::iota)
iota(begin, end, value)
递增填充给定区间,即
*(d_first) = value;
*(d_first+1) = ++value;
...
示例:
vector<int>vec;
vec.resize(10);
iota(vec.begin(), vec.end(), 0);
//vec: {0, 1, 2, ..., 9}
定值填充 (std::fill)
fill(begin, end, val)
填充给定区间为val
fill_n(begin, n, val)
指定区间起点和长度
生成值填充 (std::generate)
generate(begin, end, func)
generate_n(begin, n, func)
使用函数生成给定区间的值
int a[10];
generate(a, a+5, read);
其中 read 函数可以为
int read(){
int ret;
scanf("%d", &ret);
return ret;
}
配合读入优化可以一行代码读取数据,免去写 for 循环了
此外还可以用来随机数填充等等
逐元素函数操作 (std::for_each)
for_each(begin, end, func)
对区间内的元素执行一元函数 func
int a[5] = {1, 2, 3, 4, 5};
for_each(a, a+5, [](int &x){ x&=1; });
//a : {1, 0, 1, 0, 1}
感觉非常有用,配合 lambda 比写 for 循环舒服多了,应用场景非常广泛
逐元素函数计算 (std::transform)
transform(begin, end, res, func)
对区间内的元素执行一元函数 func ,将返回值存到 res (也是 iterator)中
可以直接存入原容器
int a[5] = {1, 2, 3, 4, 5};
transform(a, a+5, a, [](int x) { return __gcd(x, 2); });
//a : {1, 2, 1, 2, 1}
计数与条件计数 (std::count & std::count_if)
count(begin, end, value)
计数区间内值为 value 的元素个数
count_if(begin, end, func)
计数区间内满足条件的元素个数,func 为一元谓词
int a[5] = {1, -1, 2, -2, 3};
cout<<count(a, a+5, 2);
//输出 : 1
cout<<count_if(a, a+5, [](int x) { return x>0; });
//输出 : 3
感觉有了这些 STL 几乎就不再用写那种只有一两句循环体的 for 循环了...
C++STL 中的容器整体/逐元素操作方法 少写80%for循环的更多相关文章
- C++ STL 中 map 容器
C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...
- STL中的容器介绍
STL中的容器主要包括序列容器.关联容器.无序关联容器等. 一]序列容器 (1) vector vector 是数组的一种类表示,提供自动管理内存的功能,除非其他类型容器有更好满足程序的要求,否则,我 ...
- [C++]STL中的容器
C++11 STL中的容器 一.顺序容器: vector:可变大小数组: deque:双端队列: list:双向链表: forward_list:单向链表: array:固定大小数组: string: ...
- STL中的容器
STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist ...
- C++ STL中常见容器的时间复杂度和比较和分析
C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O( ...
- 算法求解中的变量、数组与数据结构(STL 中的容器)
本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...
- STL中常用容器及操作 学习笔记1
@[TOC](下面介绍STL中常见的容器及操作)## 不定长数组 vector> vetcor:其实就是一个数组或者说是容器 其操作不同于之前直接定义的数组 > 而且可以直接赋值也可以直接 ...
- C++STL中map容器的说明和使用技巧(杂谈)
1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...
- stl中的容器、迭代器和算法----vector中的find实现
来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...
随机推荐
- Hive学习之路 (三)Hive元数据信息对应MySQL数据库表
概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理.上一篇hive的安装也是将元数据信息存放在MySQL数据库中. Hive的元数据信息在MySQL数据中有57 ...
- EF Core 入门
官方文档地址 https://docs.microsoft.com/zh-cn/aspnet/?view=aspnetcore-2.2#pivot=core EF Core 使用 1. 创建数据库上下 ...
- 404 Note Found 队-Beta1
目录 组员情况 组员1(组长):胡绪佩 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团 ...
- 轻量级IOC容器:Ninject
Ninject是一个快如闪电.超轻量级的基于.Net平台的依赖注入框架.它能够帮助你把应用程序分离成一个个松耦合.高内聚的模块,然后用一种灵活的方式组装起来.通过使用Ninject配套你的软件架构,那 ...
- css选择器,样式表导入
css笔记1.选择器(selecter)共9种 a.类型选择器 p{},body{} b.后代选择器 p h1{} c.ID选择 #idname{} d.类选择 .classname{} e.通用选择 ...
- Nginx服务器的平滑启动、平缓停止、平滑升级
注:Nginx服务在运行时,会保持一个主进程(master process)和一个或多个工作进程(worker process). 每一个进程都会有一个PID进程号,可以通过向主进程的PID进程号发送 ...
- Hibernate第一天——入门和基本操作
第一个接触的框架就是这个Hibernate框架了,Hibernate本意是 冬眠 ,这里有必要引用CSDN上某位网友某个帖子的评论先引出框架的概念: 框架:一个软件半成品,帮你做了一些基础工作,你就可 ...
- WPF模拟雷达界面效果图
原文:WPF模拟雷达界面效果图 iPad塔防的防守兵的效果很炫,2个小时用WPF模拟了一个. 效果图: 关键代码: <Grid> <Grid.Background> <I ...
- 一维码UPC A简介及其解码实现(zxing-cpp)
UPC(Universal Product Code)码是最早大规模应用的条码,其特性是一种长度固定.连续性的条 码,目前主要在美国和加拿大使用,由于其应用范围广泛,故又被称万用条码. UPC码仅可 ...
- 【BZOJ1054】[HAOI2008]移动玩具
[BZOJ1054][HAOI2008]移动玩具 题面 bzoj 洛谷 题解 太\(sb\)了,不想写了,直接点开洛谷题面单击右边蓝色按钮题解即可