《C++标准程序库》学习笔记5 — 第七章

  • 1.(P252)

迭代器的分类及其能力:

input迭代器只能读取元素一次。如果复制input迭代器,并使原迭代器和新产生副本都向前读取,可能会遍历到不同的值。output迭代器类似。

  • 2.(P258)

C++不允许修改任何基本类型(包括指针)的暂时值,但对于struct, class则允许。

所以:

1
2
vector<int> ivec; 
sort(++ivec.begin(), ivec.end());

也许会失败,这取决于vector的实作版本。

  • 3.(P259)

C++标注库为迭代器提供的三个辅助函数
①. advance() 前进(或后退)多个元素

1
2
#include <iterator>
void advance(InputIterator & pos, Dist n)

注:对于Bidirectional迭代器或Random Access迭代器,n可以为负值,表示后退
②. distance()  处理迭代器之间的距离

1
2
#include <iterator> 
Dist distance (InputIterator pos1, InputIterator pos2)

③. iter_swap() 可交换两个迭代器所指内容

1
2
#include <algorithm> 
void iter_swap(ForwardIterator pos1, ForwardIterator pos2)

注:不是交换迭代器!

  • 4.(P264)

迭代器配接器之Reverse(逆向)迭代器
对于reverse iterator,他实际所指位置与逻辑所指位置并不一样:
eg.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; int main() 
{ vector<int> coll; for (int i=1; i<=9; ++i) { coll.push_back(i); } vector<int>::iterator pos; pos = find (coll.begin(), coll.end(),5); cout << "pos: " << *pos << endl; vector<int>::reverse_iterator rpos(pos); cout << "rpos: " << *rpos <<endl; 
}

结果是:
pos: 5
rpos: 4

iter1

这是reverse iterator的内部机理图(*)

iter2

 

 

 

 

 

 

可以看出,[begin(), end() ) 和 [rbegin(), rend() )的区间是一样的
base()函数可以将逆向迭代器转回正常迭代器

eg.

1
pos = rpos.base();

注:

1
vector<int>::reverse_iterator rpos(pos);

可以将迭代器赋值给逆向迭代器从而隐式转换,而将逆向迭代器转换成普通迭代器则只能用base()函数。
这一块内容颇多,要认真把P264~P270看看。

  • 5.(P271)

迭代器配接器之Insert(安插)迭代器
iter3

  • 6.(P277)

迭代器配接器之Stream(流)迭代器
Osream流迭代器:
iter4
Istream流迭代器
iter5
综合性的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Author: Tanky Woo 
// Blog:   www.WuTianQi.com 
#include <iostream> 
#include <vector> 
#include <iterator>using namespace std; int main() 
{ istream_iterator<int> cinPos(cin); istream_iterator<int> cinEnd; ostream_iterator<int> coutPos(cout, " "); while(cinPos != cinEnd) *coutPos++ = *cinPos++; return 0; 
}

转载于:https://www.cnblogs.com/tanky_woo/archive/2011/01/29/1947547.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android无线调试——抛开USB数据线

开发Android的朋友都知道&#xff0c;真机调试需要把手机与PC相连&#xff0c;然后把应用部署到真机上进行安装和调试。长长的USB线显得很麻烦&#xff0c;而且如果需要USB接口与其他设备连接的话显得很不方便。今天介绍一种不通过USB线就可以进行真机调试的方法。首先让手机与…

C中不能直接比较两个double类型

在比较float 和double类型的时候&#xff0c;因为float/double精度的问题&#xff0c;比如1.000000001可能和1.0000000000001相等&#xff0c;不应该直接使用a>b等类似的方式进行比较&#xff0c;而是采用 两个数做差取绝对值然后跟指定的精度进行比较 &#xff0c;便可得出…

C#基础——C#入门

教材是C#入门经典&#xff08;第四版&#xff09;。 PC:Thinkpad sl410 OS:Win7 Ultimate SDE:VS 2010 Ultimate 1.2 什么是C#&#xff1f; C#是从C、C语言演化而来&#xff0c;Microsoft专门为使用.Net平台而创建的语言&#xff0c;读作C sharp。运行在.Net CRL环境上的应用程…

VS2017动态链接库(.dll)的生成与使用

这里以VS2017为例子&#xff0c;讲解一下动态链接库&#xff08;.dll&#xff09;的生成与使用。 一、动态链接库&#xff08;.dll&#xff09;的生成 1、打开&#xff1a;“文件”-“新建”-“项目” 2、打开&#xff1a;“已安装”-“模板”-“Visual C”-“Win32”-“Win3…

让Windows7 x64 IIS7支持32位应用程序

我的os是Win7 64位&#xff0c;因为开发的一个应用程序使用了非dot net 的32 位的dll。 经常出现无法装载****.dll的问题。 下面的命令让IIS 7支持32位的应用程序&#xff1a; cscript %SystemDrive%\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin…

c#中用声音提示报警(转)

using System; using System.Runtime.InteropServices; 调用 Interaction.Beep(); 使用MessageBeep(unit uType):需添加 using System.Runtime.InteropServices; public const int MB_ICONEXCLAMATION 48; [DllImport("user32.dll")] public static extern bool M…

android3.2以上切屏禁止onCreate()

一般切屏禁止onCreate&#xff08;&#xff09;方法需要将activity加上属性&#xff1a; android:configChanges”orientation|keyboardHidden” 但是在3.2以上就不起作用了&#xff0c;需要加上screenSize&#xff08;也只有3.2以上才有这个选项&#xff09;: android:configC…

typedef用法总结

1、用途一&#xff1a;定义一种类型的别名&#xff0c;可以用作同时声明指针型的多个对象。 比如对于char* pa, pb&#xff0c;初学者往往错误地认为定义了两个字符型指针&#xff0c;但是它只声明了一个指向字符变量的指针和一个字符变量&#xff1b; 而 typedef char* PCH…

Linux下gcc编译生成动态链接库*.so文件并调用它

动态库*.so在linux下用c和c编程时经常会碰到&#xff0c;最近在网站找了几篇文章介绍动态库的编译和链接&#xff0c;总算搞懂了这个之前一直不太了解得东东&#xff0c;这里做个笔记&#xff0c;也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助。1、动态库的编译下面通过…

Mysql安装后在服务里找不到和服务启动不起来的解决方法

一&#xff0c;在安装完Mysql数据库后&#xff0c;发现在控制面板->管理->服务中找不到Mysql的服务启动 解决方法如下&#xff1a;开启命令行&#xff0c;按照如下步骤即可&#xff1b; 1.进入到mysql的安装包&#xff0c;在bin里执行&#xff1a;mysqld.exe -install …

WINFORM如何只弹出一个子窗体

public partial class Form1:Form{ Form2 fnull; public Form1() { InitializeComponent(); } private void Form1_Click(object sender, EventArg e) { if(fnull||f.IsDisposed) //注意先判断null&#xff0c;再判断IsDisposed&#xff0c;…

“指向指针的指针”的应用场景

结合以下博文来看。 值传递与地址传递的区别_天糊土的博客-CSDN博客 二维数组数和指针操作的理解_天糊土的博客-CSDN博客 “指针1”的理解_天糊土的博客-CSDN博客 多重指针操作_天糊土的博客-CSDN博客_多重指针 二重指针的应用场景 &#xff08;1&#xff09;用指针的指针指向指…

su root 和su - root 的区别

前几天&#xff0c;在一次项目中&#xff0c;犯了一个很低级的错误&#xff0c;但是没弄明白是什么问题。情况是这样的&#xff0c;我们在做灾备&#xff0c;重启系统化&#xff0c;以root用户权限&#xff0c;通过 su oracle &#xff0c;进去后&#xff0c;oracle的rac 无法正…

弹出框

<!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312" /> <title>AlertBox 弹出层&#xff08;信息提示框&#xff09;效果&l…

一些Base64编码/解码及数据压缩/解压方面的知识

一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeDecode组件,以及RjMime单元. 在这里主要想讲讲如何才能获得最好的编码/解码性能,EncdDecd提供了EncodeStream/DecodeSt…

easyUI 绑定右键菜单在数据行上显示

easyUI的显示数据的div都有一个样式,如下图 所有的表格都有一个datagrid-cell的样式那么这个时候我们就可以利用jquery来做时间的绑定了 下面是主要的js代码: /*绑定右键*/$(".datagrid-cell").live(contextmenu,function(e){//显示快捷菜单$(#mm).menu(show, {left:…

值传递与地址传递的区别

以下内容源于网络资源的学习与整理&#xff0c;欢迎交流。 总结 值传递&#xff0c;只是把原参的复制品传给形参&#xff0c;在子函数中修改这个形参&#xff0c;不会改变主函数中的原参。 地址传递&#xff0c;由于形参和原参表示同一个内容&#xff0c;在子函数中修改形参&a…

交叉编译器arm-linux-gcc

(一)交叉编译器简介 在一种计算机环境中运行的编译程序&#xff0c;能编译出在另外一种环境下运行的代码&#xff0c;这个编译过程就叫交叉编译.简单地说&#xff0c;就是在一个平台上生成另一个平台上的可执行代码. (二)体系结构与操作系统 (1)常见的体系结构有ARM结构、x86结…

web前端细解cookie那些事

web前端细解cookie那些事&#xff0c;在互联网时代&#xff0c;IT行业飞速发展&#xff0c;带动了web前端开发行业的兴趣。由于行业新兴起时间不久&#xff0c;专业人才缺乏&#xff0c;薪资待遇较高&#xff0c;已成为众多IT学子选择就业的首选&#xff0c;今天就为分享一些有…

一个很好的机器学习普及网站

1.介绍svm等算法深入浅出的网站 Free Mind 2.关于聚类算法的普及 A tutorial on Clustering Algorithm(中文翻译) 模糊聚类的应用--目标分割 exlusive clustering&#xff08;比如K-means) hierarchy clustering&#xff1a;先将 n 个样品各看成一类&#xff0c; 然后规定类与…