学习C++ Primer 的个人理解(十)
标准库没有给每个容器都定义成员函数来实现 查找,替换等操作。而是定义了一组泛型算法,他们可以用于不同类型的元素或多种容器类型。
迭代器令算法不依赖与容器
算法永远不会执行容器的操作
算法本身不会执行容器的操作,他只会运行于迭代器之上。
算法永远不会改变底层容器的大小,有可能改变元素的值,也可能在容器内移动元素,但永远不会直接添加或删除元素。
只读算法
类似find就是这样一种算法,只会读取其输入范围内的元素,永远不会改变元素。
accumulate也是只读算法。
int sum = accumulate ( vec.cbegin(), vec.cen() , 0 );//对vec中的元素求和。
算法和元素类型
string sum = accumulate(vec.cbegin(), vec.cen() , string("")); // 这样是可行的,因为string类型定义了+运算
string sum = accumulate(vec.cbegin(), vec.cen() ,""); //这样是不行的,因为这样的字面值实际上const char* 没有定义+运算符
操作两个序列的算法
equal() , 用于确定两个序列是保存相同的值。
equal( roster1.cbegin() , roster1.cend(),roster2.cbegin())
所有接受单一迭代器表示第二序列的算法,都假定第二序列至少和第一序列一样长。
写容器元素的算法
fill ( vec.begin() , vec.end() , 0) // 将每个元素重置为0
算法不检查写操作
算法假定写入指定个元素是安全的。
向目的位置迭代器写入数据的算法假定目的位置足够大,能够容纳要写入的元素
back_inserter
这种算法保证有足够的空间来容纳输出的数据。 插入迭代器
back_inserter接受一个指向容器的引用,返回一个与该容器绑定的插入迭代器。当我们通过此迭代器赋值时,赋值运算符会调用push_back将一个具有给定值的元素添加到容器中。
vector<int> vec;
auto it = back_inserter(vec);
*it = 42;
lambda表达式
根据算法接受一元谓词还是二元谓词,我们传递给算法的谓词必须严格接受一个或两个参数。有时候我们希望操作更多的参数。则可以使用lambda表达式。
一个lambda表示一个可调用的代码单元。格式如下:
[捕获列表] (参数列表) -> 返回类型 { 函数体 }
可以忽略参数列表和返回类型,如:
auto f = [] {return 42; }
向lambda传递参数
使用捕获列表,lambda需要明确指明需要哪些变量。将其放在捕获列表中。
lambda可以采用引用方式捕获变量。
隐式捕获
在捕获列表中写 & 或 =
学习C++ Primer 的个人理解(十)的更多相关文章
- 学习C++ Primer 的个人理解(十二)
		
动态内存与智能指针 在C++中, 动态内存用 new来分配空间并返回一个指向该对象的指针 用delete来销毁. 由于手动的对动态内存进行操作容易出现问题.所以新的标准库提供了两种智能指针. 智能指针 ...
 - 学习C++ Primer 的个人理解(一)
		
<C++ Primer>这本书可以说是公认的学习C++最好的书,但我觉得不是特别适合作为教材,书中内容的顺序让人有些蛋疼.我个人认为初学此书是不能跳着看的.如果急于上手的话,我更推荐< ...
 - 学习C++ Primer 的个人理解(九)
		
这一章介绍顺序容器,在之前的第三章中,了解到的vector就属于顺序容器的一种. 一个容器就是一些特定类型对象的集合. 除了vector,还有哪些顺序容器? vector: 大小可变,随机访问的速度很 ...
 - 学习C++ Primer 的个人理解(三)
		
第三章,主要内容是字符串和数组.感觉作者的意图是希望读者可以早一点可以写出简单的小程序,并且可以早点接触迭代器这种思想. 在我看来,这种内容的难度并不大. 对于编程来说,最重要的应该是思想,类似vec ...
 - 学习C++ Primer 的个人理解(二)
		
本身就一定基础的读者我想变量常量这些概念应该已经不是问题了.但是本章还是有几个重点,需要特别留意一下的: 1.初始化和赋值是不同的操作 2.任何非0值都是true 3.使用新标准列表初始化,在有丢失精 ...
 - 学习C++ Primer 的个人理解(零)
		
由于自己看书之后经常容易忘记细节,所以写在博客上让我自己的思路更加清晰一些. 我的博客仅仅只是将书中的内容概括一下,有一些不好理解的部分我会用我自己理解的方式使用大白话写出来. 仅此而已.
 - 学习C++ Primer 的个人理解(十一)
		
关联容器 就像是个字典, 其元素是 键 - 值 对. 关键字起到索引作用. 有序: map:关联数组:保存 健-值 对 set : 关键字既是值. multimap : 关键字可重复出现的map mu ...
 - 学习C++ Primer 的个人理解(八)
		
结束了第一部分,在最后的第七章,我只简单的总结了一下,因为后面还会更详细的说明有关类的内容.而且说实在的这一张的内容让我很不舒服,验证了本书实际上有许多内容是作者的学生一起拼凑而成的.第七章结构给我感 ...
 - 学习C++ Primer 的个人理解(七)
		
类,后面还有两章是介绍有关于类的内容的.这一张依然只是个概括.但也已经将大致用法介绍完了. 重点如下: 1.成员函数的声明,必须在类的内部. 2.引用const成员函数 我们知道成员函数中有一个名为t ...
 
随机推荐
- Foxmail
			
我们在“POP3/SMTP服务”前面打钩,这样我们的QQ邮箱设置已经完成了,我们就可以在foxmail客户端上QQ邮箱了 QQ邮箱的POP3与SMTP服务器是什么? QQ邮箱 POP3 和 SMTP ...
 - Ubuntu安装和配置redis
			
1.用root用户登录 2.执行 sudo apt-get install redis-server 部分截图
 - C++容器类对象函数參数问题
			
总之中的一个句话:容器类对象作为函数參数,与整数类型作为函数參数的传递特性同样. 验证程序 #include "stdafx.h" #include <iostream> ...
 - ios项目开发(天气预报项目):通过经纬度获取当前城市名称
			
 1 . 在项目里加入� CoreLocation.framework 2 .在 .h 文件输入例如以下: 1.#import <CoreLocation/CLLocation.h> ...
 - PAT 1006
			
1006. Sign In and Sign Out (25) At the beginning of every day, the first person who signs in the com ...
 - VS2012 编译GDAL
			
先安装VS 2012, 然后下载GDAL最新版本代码,解压. 用管理员权限打开Developer Command Prompt for VS2012终端,进入代码目录. 然后运行命令: nmake / ...
 - Android,使用Intent或Bundle传递参数,跳转页面。
			
(1)使用Intent跳转页面: 第一个activity:MainActivity.java中: Intent myIntent = new Intent(); myIntent.putExtra(& ...
 - iOS开发中图片方向的获取与更改
			
iOS开发中 再用到照片的时候 或多或少遇到过这样的问题 就是我想用的照片有横着拍的有竖着排的 所以导致我选取图片后的效果也横七竖八的 显示效果不好 比如: 图中红圈选中的图片选取的是横着拍 ...
 - 自定义异常以及runtime类
			
一.自定义异常: 1.自定义异常的概念:在java编程中,我们会遇到很多问题,但是这些问题异常,java并没有给我们定义好,那么我们就要自己定义这些异常,这就是自定义异常: 2.throws 是声明异 ...
 - 关于JFace的自定义对话框(Dialog类)
			
仅仅是使用MessageDialog,InputDialog等JFace中现成的对话框类是无法满足实际项目开发需要的. 很多时候都需要自己定制对话框,自定义对话框只要在Dialog类的基础上作扩展就行 ...