30分钟掌握STL系列(三)

2023-11-18

                                                                                                                                 30分钟掌握STL系列(三)

使用迭代器编程

下面就讲一讲几种类型迭代器的编程。

输入迭代器

输入迭代器是最普通的类型。输入迭代器至少能够使用==和!=等。使用*来访问数据;使用++操作来递进迭代器到下一个元素或到达past-the-end值。为了理解迭代器和STL函数是如何使用它们的,现在来看一下find()模板函数的定义:

   template<class InputIterator,class T>

   InputIterator find(

         InputIterator first,InputIterator last,const T& value){

                while(first!=last && *first!=value) ++first;

               return first;

        }

输出迭代器

输出迭代器缺省只写,通常用于将数据从一个位置拷贝到另一个位置。由于输出迭代器无法读取对象,因此你不会再任何搜索和其他算法中使用它。要想读取一个拷贝的值,必须使用另一个输入迭代器(或它的继承迭代器)。看一段程序:

#include<iostream.h>

#include<algorithm>

#include<vector>

using namespace std;

double darray[10]={1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9};

vector<double> vdouble(10);

int main()

{

    vector<double>::iterator outputIterator=vdouble.begin(();

    copy(darray,darray+10,outputIterator);

    while(outputIterator!=vdouble.end()){

        cout<<*outputIterator<<endl;

        outputIterator++;

      }

   return 0;

}

当使用copy()算法的时候,你必须确保目标容器有足够大的空间,或者容器本身是自
动扩展的。

前推迭代器

前推迭代器能够读写数据值,并能够先前推进到下一个值。但是没法递减。

下面的算法显示了前推迭代器的使用方法:

template<class ForwardIterator,class T>

void replace(ForwardIterator first,ForwardIterator last,const T& old_value,const T& new_value);

使用replace()将[first,last]范围内的所有值为old_value的对象替换为new_value的值。

 

双向迭代器

双向迭代器要求能够增减。如reverse()算法要求两个双向迭代器作为参数:
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first,
BidirectionalIterator last);
使用reverse()函数来对容器进行逆向排序:
reverse(vdouble.begin(), vdouble.end());

随机访问迭代器

随机访问迭代器能够以任意顺序访问数据,并能用于读写数据(不是const的C++指针
也是随机访问迭代器)。STL的排序和搜索函数使用随机访问迭代器。随机访问迭代
器可以使用关系操作符作比较。

random_shuffle() 函数随机打乱原先的顺序。申明为:
template <class RandomAccessIterator>
void random_shuffle (RandomAccessIterator first,
RandomAccessIterator last);
使用方法:
random_shuffle(vdouble.begin(), vdouble.end());

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

30分钟掌握STL系列(三) 的相关文章

  • 更改 CSS 样式表的选择器属性

    以下是我们传统上如何更改重复元素的样式 将样式应用到每个元素 function changeStyle selector prop val var elems document querySelectorAll selector Array
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • 在 R 中,如何让 PRNG 在平台之间给出相同的浮点数?

    在 R 4 1 1 中运行以下代码会在平台之间产生不同的结果 set seed 1 x lt rnorm 3 3 print x 22 0 83562861241004716 intel windows 0 8356286124100471
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 如何实现 Iterable 接口?

    给定以下代码 如何迭代 ProfileCollection 类型的对象 public class ProfileCollection implements Iterable private ArrayList
  • 为什么未调用的模板类成员未实例化?

    我想知道当我创建类模板的实例并指定模板类型参数时 1 为什么非调用函数没有被实例化 2 在我尝试使用它们之前它们不会被编译吗 3 这种行为背后的逻辑是什么 例子 template
  • 如何生成泊松过程?

    原问题 我想生成一个泊松过程 如果按时间到达的人数t is N t 我有一个带有参数的泊松分布 我如何生成N t 我将如何在 C 中做到这一点 澄清 我最初想使用泊松分布生成过程 但是 我对我需要的过程参数感到困惑 我以为我可以用N t 但
  • 当类的任何属性被修改时,类如何运行某些函数?

    是否有一些通用方法可以让类在以下情况下运行函数 any它的属性被修改了吗 我想知道是否可以运行某些子进程来监视类的更改 但也许有一种方法可以继承class并修改一些on change函数是 Python 类的一部分 有点像默认的 repr
  • Laravel - 如何使用供应商类?

    我想在 m paths php 文件上使用移动检测 我已将该包添加为composer json 中的必需项 并将其安装在供应商文件中 我现在该如何使用它 我尝试了这个答案 但没有成功 因为找不到该课程 Laravel 4 使用供应商类 ht
  • 在 Groovy 中分配对象属性的简写方法?

    我使用此约定创建 Groovy 对象 Item item1 new Item name foo weight 150 是否有操作属性对象的速记约定 像这样的东西 item1 name hello weight 175 this does n
  • C++继承自具有相同虚函数名的多个基类

    我尝试了这段代码 class A virtual void foo 0 class B virtual void foo 0 class C public A public B virtual void A foo virtual void
  • WriteLine 与类

    我正在制作一个 SchoolApp 程序来学习 C 并且我正在尝试实现以下主要功能 namespace SchoolApp class Program public static void Main string args School s
  • 随机字符串生成器产生相同结果的问题

    我使用随机字符串生成器 基于此 http stackoverflow com questions 1344221 how can i generate random 8 character alphanumeric strings in c
  • 我如何访问 Common lisp 中 Defclass 插槽的 :Documentation 字符串

    好的 这是我如何实例化 Defclass 以及相关的 Defmethod 和 Defparameter defvar account numbers 0 defclass bank account customer name initarg
  • jQuery 从 $(selector) 返回的选择中获取随机元素

    If my element 匹配多个元素 有没有一种快速的方法可以从中获取随机元素 fn random function return this eq Math floor Math random this length selector
  • 在 C++ 中,为什么我们不能使用 > 和 < 来比较迭代器? [复制]

    这个问题在这里已经有答案了 我被问过这个问题 我真的不知道为什么 如果你有指针int x 您可以将指针与 gt and lt 因为它代表内存位置 例如0x0000 0x0004 0x0008等等 我知道迭代器和指针是不同的 但它们的行为方式
  • 将文本文件扫描到对象数组中

    我有一个逗号分隔的文本文件 其信 息格式如下 名字 姓氏 餐1 餐2 餐3 餐4 每个新学生都在新的一行 我有以下学生对象 public class Student private String first null private Str
  • Rust 迭代器和 C++ 迭代器之间的主要区别是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 C 迭代器的一个典型示例是指针 可用于指向 C 数组中的元素 如下所示 int array 1 2 3 4 int begin std
  • Django modelAdmin __init__ 和内联

    嘿 我对 Django 相当陌生 我正在寻找动态编辑管理类变量 完整的想法是在添加时隐藏内联 仅在编辑时显示 但我在这里提炼这个问题 有人可以解释为什么这不起作用吗 class dbTablePermissionInline admin T
  • python 类的属性不在 __init__ 中

    我想知道为什么下面的代码有效 usr bin env python3 import sys class Car def init self pass if name main c Car c speed 3 c time 5 print c

随机推荐

  • STM32---外部中断

    目录 1 外部中断描述 2 外部中断框图 总结 经过分析框图 可以产生软件中断和事件中断 软件中断的目的是进中断服务函数 事件中断是产生一个脉冲信号给片内外设 属于硬件级别的 3 各寄存器作用 4 端口对应 5 编程思路 EXIT NVIC
  • mysql8.0出现group by报错

    数据库跟目录执行set GLOBAL sql mode STRICT TRANS TABLES NO ZERO IN DATE NO ZERO DATE ERROR FOR DIVISION BY ZERO NO ENGINE SUBSTI
  • Qt 使用笔记 --转自 wangwenx190/Note

    转自 https github com wangwenx190 notes blob master qt zh cn md Qt 使用笔记 Qt 6 目标平台变更 Qt6 不再支持32位Windows系统 不再支持Windows 7 Win
  • pageHelper.startPage(m,n)的用法

    pageHelper startPage m n 的用法 pageHelper startPage m n 是分页查询 PageHelper startPage m n 两个参数 第一个参数是页数 第二个参数是条数 每页查询的条数 例如我想
  • 疯壳AI开源无人机SPI(六轴传感器数据获取)

    一 ICM20602简介 六轴传感器在当今智能穿戴和定位导航产品中被广泛应用 而六轴传感器中做的最好的要属InvenSense公司的产品了 ICM20602便是其推出的优秀六轴传感器之一 ICM20602集成3轴加速度计和3轴陀螺仪 其中陀
  • bat命令备份oracle数据库,并且删除7天之前的数据文件

    用批处理命令备份oracle数据库 我是用在windows server 2008 服务器上 并且创建了定时任务 让他7天执行一次 下面贴出代码 echo off echo echo Windows环境下Oracle数据库的自动备份脚本 e
  • Fast DDS入门五、在Windows平台创建一个简单的Fast DDS示例程序

    1 创建简单示例程序 在这里 先建立一个IDL文件 然后通过使用Fast DDS Gen生成程序生成这个简单示例程序 Fast DDS Gen程序的编译安装请参考 Fast DDS入门二 Fast DDS在Windows平台的编译安装 Fa
  • 狂热的NFT,泡沫还是风口?

    比特币市场狂热的NFT今年以来 不仅 元宇宙 爆火 NFT Non Fungible Token 非同质化代币 也掀起一波波炒作热潮 3月份 数字艺术家Beeple的NFT作品 每一天 前5000天 在佳士得拍卖行以6934万美元成交 创造
  • 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误

    报的错误如下所示 14 30 54 637 ERROR http nio 8094 exec 4 127 0 0 1 f6c45349d812457bbb5e42bc3a1bc09d 1 0 com credithc enjoy manag
  • 【Python函数的递归】

    递归的定义 函数作为一种代码封装 可以被其他程序调用 当然 也可以被函数内部代码调用 这种函数定义中调用函数自身的方式称为递归 就像一个人站在装满镜子的房间中 看到的影像就是递归的结果 递归在数学和计算机应用上非常强大 能够非常简洁的解决重
  • 可视化的数据结构和算法

    转载自 http sd csdn net a 20110506 297285 html 导读 作者陈皓之前写过关于可视化排序的一篇文章 现在他又给大家罗列出可视化的数据结构和算法来供大家学习参考 文中分别从基础 索引 排序 动态编程等方面进
  • 微软句向量工具包Sent2vec

    工具介绍 What is sent2vec sent2vec maps a pair of short text strings e g sentences or query answer pairs to a pair of featur
  • 关于 OneNote 无法正常同步 问题

    问题 无法正常同步 备注 问题开始之前请刷新一下DNS缓存 https blog csdn net ljason1993 article details 83040313 看一下 无法正常同步 意思是卡同步条 一直显示同步条问题 就这个绿条
  • 如何找Ubuntu的历史版本的iso镜像文件

    目录 1 中文网站上的查找 2 英文网站上的查找 1 中文网站上的查找 中文网站为 企业开源和Linux UbuntuUbuntu是适用于企业服务器 桌面电脑 云 IoT物联网的现代化开源Linux操作系统 Ubuntu官网 https c
  • 计算机网络安全论文选题提纲,计算机网络安全毕业论文提纲

    计算机网络安全毕业论文提纲 想要写好一篇论文 首先需要一份提纲 理清思路 才能帮助你顺利的写好论文 那么 计算机网络安全毕业论文提纲又应该怎样写呢 下面是小编为大家整理的计算机网络安全毕业论文提纲 欢迎参考 题目 主标题 数据结构课程建设
  • 【软件工程】详细设计说明书

    详细设计说明书 1引言 1 1编写目的 说明编写这份详细设计说明书的目的 指出预期的读者 该文档实在概要设计的基础上 进一步的细化系统结构 展示了软件啊结构的图标 物理设计 数据结构设计 及算法设计 详细的介绍了系统各个模块是如何实现的 包
  • 【Go语言核心手册11】context.Context

    往期精选 欢迎转发 如何看待程序员35岁职业危机 Java全套学习资料 14W字 耗时半年整理 我肝了三个月 为你写出了GO核心手册 消息队列 从选型到原理 一文带你全部掌握 肝了一个月的ETCD 从Raft原理到实践 更多 11 1 内容
  • 仓储系统货位优化毕业论文【Flexsim仿真】

    一 内容简介 由堆垛机 货架 输送系统 管理系统 控制系统等组成的传统堆垛式仓储系统因为其成熟的技术和推广方式 高效等特点广泛的应用在物流 车间 制造等行业 但是堆垛机仓库每个巷道都会拥有一台堆垛机 其作业方式受到限制 鲁棒性比较差 一个巷
  • iOS 展示 gif

    gif 图 是多张依次有连续动作的图 顺时间展示的一种动态效果图 有的是均匀时间更换下一张 有的 则不是均匀时间变化 1 那么 对于均匀 时间变化的gif图 比较适合 使用 iOS 系统自带方法 imageView 的动态展示图片的方法就好
  • 30分钟掌握STL系列(三)

    30分钟掌握STL系列 三 使用迭代器编程 下面就讲一讲几种类型迭代器的编程 输入迭代器 输入迭代器是最普通的类型 输入迭代器至少能够使用 和 等 使用 来访问数据 使用 操作来递进迭代器到下一个元素或到达past the end值 为了理