vector容器与iterator迭代器

2023-11-01

vector容器
vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库负责管理存储元素的相关内存。我们把 vector 称为 容器 ,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。

使用vector之前,必须包含相应的头文件。
#include <vector>

using std::vector;

vector是一个类模板(class template)。模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上。因此,我们可以定义保存string对象的vector,或保存int值的vector,又或是保存自定义的类类型对象(如Sales_item对象)的vector。
声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以vector为例,必须说明vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型:

vector<int> ivec; // ivec holds objects of type int

vector<Sales_item> Sales_vec; // holds Sales_items


 

和其他变量定义一样,定义vector对象要指定类型和一个变量的列表。上面的第一个定义,类型是vector<int>,该类型即是含有若干int类型对象的vector,变量名为ivec。第二个定义的变量名是Sales_vec,它所保存的元素是Sales_item类型的对象。

vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<int>和vector <string>都是数据类型。

vector对象的定义和初始化

vector类定义了好几种构造函数,用来定义和初始化vector对象。下表3-4列出了这些构造函数:

vector<T> v1;

vector保存类型为T的对象。默认构造函数v1为空。

vector<T> v2(v1);

v2是v1的一个副本。

vector<T> v3(n, i);

v3包含n个值为i的元素。

vector<T> v4(n);

v4含有值初始化的元素的n个副本。

创建确定个数的元素

若要创建非空的vector对象,必须给出初始化元素的值。当把一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应元素的副本。但这两个vector对象必须保存同一种元素类型:

vector<int> ivec1; // ivec1 holds objects of type int

vector<int> ivec2(ivec1); // ok: copy elements of ivec1 into ivec2

vector<string> svec(ivec1); // error: svec holds strings, not ints


 

可以用元素个数和元素值对vector对象进行初始化。构造函数用元素个数来决定vector对象保存元素的个数,元素值指定每个元素的初始值:

vector<int> ivec4(10, -1); // 10 elements, each initialized to -1

vector<string> svec(10, "hi!"); // 10 strings, each initialized to "hi!"


 

关键概念:vector对象动态增长

vector对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。因为vector增长的效率高,在元素值已知的情况下,最好是动态地添加元素。这种增长方式不同于C语言中的内置数据类型,也不同于大多数其他编程语言的数据类型。特别地,如果读者习惯了C或Java的风格,由于vector元素连续存储,可能希望最好是预先分配合适的空间。但事实上,为了达到连续性,C++的做法恰好相反。

虽然可以对给定元素个数的 vector 对象预先分配内存,但更有效的方法是先初始化一个空 vector 对象,然后再动态地增加元素。

值初始化

如果没有给出元素的初始化式,那么标准库将提供一个值初始化的(value initialized)元素初

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

vector容器与iterator迭代器 的相关文章

  • Idris - 自定义相关数据类型上的映射函数失败

    我对 idris 和依赖类型相对较新 遇到了以下问题 我创建了一个类似于向量的自定义数据类型 infixr 1 data TupleVect Nat gt Nat gt Type gt Type where Empty TupleVect
  • 在 C# 中替换部分文件名

    我有一个文件夹 pdf文件 在大多数文件的名称中 我想用另一个字符串替换特定字符串 这是我写的 private void btnGetFiles Click object sender EventArgs e string dir tbGe
  • 如何将字符串转换为电话号码

    我一直被这个问题困扰了很长时间 这就是问题 编写一个函数 以字符串作为参数并返回电话号码 对应于该字符串作为结果 电话号码也应该是一个字符串 转换规则是标准单词到电话号码的规则 a b 或 c 映射到 2 d e 或 f 映射到 3 g h
  • C - 将当前日期放入文件名中

    我有4个价值观 A B C D 使用这些值进行一组计算后 我希望我的代码将结果输出到以下形式的文件中ABCD MM DD YY txt 以跟踪完成时间 我不太确定在 C 中执行此操作的最佳方法 我有一个使用的 工作 版本itoa 这不是一个
  • 从 gdb 设置 std::string 变量值?

    是否有可能 当调试器在断点处停止时 修改 std string 变量的值 而不需要采取诸如调整当前缓冲区的内存映像之类的黑客手段 例如类似于 set var mystring hello world 试试这个 经过测试并且对我有用 call
  • libc++ 中短字符串优化的机制是什么?

    这个答案 https stackoverflow com a 10319672 1805388给出了短字符串优化 SSO 的高级概述 但是 我想更详细地了解它在实践中是如何工作的 特别是在 libc 实现中 字符串必须有多短才能符合 SSO
  • 如何将字符串转换为带有“tail”的浮点数?

    我在将字符串转换为浮点数时遇到问题 print gettype value id returns string var dump value id returns string 34 7140 length 7 float floatval
  • 在 C# 中将字符串转换为等效的字节十六进制

    我有一个传入的字符串68016101061B4A60193390662046804020422044204000420040402060226024676DB16我想转换成0x68 0x01 0x61 0x01 0x06 0x1B 0x4A
  • Haskell printf 转字符串

    Haskell 中有等效的 sprintf 吗 我需要将双精度值转换并格式化为字符串 有没有其他方法而不使用printf什么样的功能 主要问题是要避免 Prelude gt putStrLn myDoubleVal 1 7944444444
  • 对于MySQL查询中的每个结果,推送到数组(复杂)

    好吧 这就是我想做的 我正在运行 MySQL 查询来获取最新的帖子 对于每个返回的行 我需要将行的 ID 推送到数组 然后在数组的该 ID 内 我需要从行中添加更多数据 多维数组 到目前为止 这是我的代码 query SELECT FROM
  • 计算 std::vector 中的设置值

    Does std vector
  • 我的程序替换了链表中所有节点中的所有字符串数据类型

    我有一个程序 基本上将历史记录 节点 添加到员工记录 链接列表 中 这是我的代码 include
  • Python - 如何在 Python 中剪切字符串?

    假设我有以下字符串 http www domain com s some two 20 怎样才能脱掉之后的东西 包括 并有这个字符串 http www domain com s some 好吧 回答眼前的问题 gt gt gt s http
  • 当 edmx 文件位于单独的项目中时出错

    我有问题说 在配置中找不到指定的命名连接 或者不打算与EntityClient提供者 或无效 我的 edmx 文件位于单独的项目中 但该项目的连接字符串app config 什么可能导致问题 确保 app config 位于设置为启动项目的
  • 如何删除Python中特定字符之前的所有字符?

    我想删除指定字符或字符集之前的所有字符 例如 intro lt gt I m Tom 现在我想删除 lt gt before I m 或者更具体地说 I 有什么建议么 Use re sub 只需匹配所有字符即可I然后将匹配的字符替换为I r
  • PHP 如何使用比较运算符比较字符串?

    我正在使用比较运算符来比较字符串 我需要对以下两个比较及其结果进行某种解释 if ai gt i echo Yes else echo No output No 为什么这些会这样输出 if ia gt i echo Yes else ech
  • 映射枚举列表

    我有一个名为 UserPermissions 的表 其中通过 userId 与用户表进行 FK 然后是一个用于枚举字符串值的字符串列 我看到的错误是 NHibernate MappingException 表 UserPermissions
  • 性能 - String.charAt(0) 与 /^.{1}/

    从概念上讲哪个应该更快 String charAt 0 or 1 regex String charAt 0 必须处理和应用正则表达式 速度测试资源 Paul S https stackoverflow com users 1615483
  • 检查字符串中是否存在所有字符值

    我目前正在做这项任务 但我被困住了 目标是读取文件并查找文件中的字符串中是否存在这些字符值 我必须将文件中的字符串与作为参数放入的另一个字符串进行比较 但是 只要每个字符值位于文件中的字符串中 那么它就 匹配 示例 输入和输出 a out
  • 如何将字符串转换为二进制?

    我需要一种方法来获取 python 中字符串的二进制表示形式 例如 st hello world toBinary st 是否有一个模块可以以某种巧妙的方式执行此操作 像这样的东西吗 gt gt gt st hello world gt g

随机推荐

  • SpringBoot集成Redisson

    依赖包
  • 深入浅出AXI协议(2)——通道及信号

    一 前言 在之前的文章中 我们主要介绍了什么是AXI协议 AXI协议的特点与优点 然后对于AXI协议非常重要的五通道结构进行了介绍 了解了5个通道各自的作用 本文我们继续AXI协议的学习 我们将讨论5个通道的具体内容和相对应的信号 这一部分
  • YOLOX代码、预测(使用摄像头实时预测)及其添加SE注意力前后的实验结果

    1 代码获取 https github com Le0v1n ml code tree main ObjectDetection YOLOX 如果代码对你有用 请star一下 2 预测 2 1 图片预测 下载权值文件 https githu
  • SprongBoot项目整合Druid实现数据监控功能

    web程序普遍的都会涉及到数据库的操作 为了提高系统的性能 在数据库操作上 几乎千篇一律的使用了数据库连接池技术 数据库连接池有很多选择 c3p dhcp proxool等 druid作为一名后起之秀 凭借其出色的性能 也逐渐印入了大家的眼
  • 服务器网页500错误修复工具,HTTP500错误是什么?如何修复

    500 Internal Server Error是一个非常普通的HTTP状态代码 表示网站的服务器出了点问题 但是服务器不能更准确地说明的问题是什么 您可以通过以下几种常见方式来查看HTTP 500错误 500内部服务器错误 HTTP 5
  • Seaborn中文教程

    Seaborn介绍 Seaborn属于Matplotlib的一个高级接口 为我们进行数据的可视化分析提供了极大的方便 博主是为了入门Kaggle比赛而学习的Seaborn 下面是博主的学习过程 希望可以和大家一起分享 Step 1 安装Se
  • 和月薪5W的阿里程序员聊过后,才知道自己一直在打杂...

    前几天和一个朋友聊面试 他说上个月同时拿到了腾讯和阿里的offer 最后选择了阿里 阿里内部将员工一共分为了14个等级 P6是资深工程师 P7是技术专家 其中P6和P7就是一个分水岭了 P6是最接近P7的不持股员工 P7开始就是持股员工 由
  • vue 使用播放器插件 vue-video-player

    1 安装 cnpm install save vue video player 2 在main js入口文件中引入 import VideoPlayer from vue video player require video js dist
  • 生成timeuuid_UUID生成唯一的16位随机数

    Copyright c 2003 2011 Oracle and or its affiliates All rights reserved packagejava util import java security A class tha
  • 【Windows】Word文档中的Endnote“乱码”

    打开一个Word文档 发现文中用Endnote插入的参考文献全部都乱了 最后找到了症结所在 快捷键 Alt F9 OK了
  • 在telnet下操作memcache详解(操作命令详解)

    在定位问题 测试等时候经常需要对memcache的数据进行一些操作 但是其本身没有自带的客户端 所以只能通过telnet来进行操作 通过telnet连接memcache 复制代码代码如下 telnet 127 0 0 1 11211 mem
  • 使用vim编写C/C++程序

    一 准备工作 1 安装vim 已安装则忽略 sudo apt get install vim 2 安装C的编译器gcc和C 的编译器g 已安装则忽略 sudo apt get install gcc sudo apt get install
  • 用pyhtml2pdf(python)包自动从html生成pdf

    用pyhtml2pdf python 包自动从html生成pdf 1 pyhtml2pdf的使用 代码示例 运行代码需要先安装拓展库 pip install pyhtml2pdf 更多详情 请参见官网 https www cnpython
  • 这些自动化测试框架知识你还不知道?

    这些自动化测试框架知识你还不知道 无论是在自动化测试实践 还是日常交流中 经常听到一个词 框架 之前学习自动化测试的过程中 一直对 框架 这个词知其然不知其所以然 最近看了很多自动化相关的资料 加上自己的一些实践 算是对 框架 有了一些理解
  • android动态刷新主页,Android手把手教大家制作APP首页(下拉刷新、自动加载)

    一 概述 作为一名三年Android开发经验的程序员 今天和大家一起实战一款APP的首页功能 这个首页在我们平时接触中还是很常见的 虽然页面简单 但是里面涉及的功能点还是挺多的 代码如有不足的还望各路同仁指点一二 页面中使用的开发库 整个首
  • 多元线性回归-最小二乘法 最大似然估计

    一 引言 设随机变量 y y y与一般变量 x 1 x 2
  • 【程序】【必须】PID位置环控制,代码+调参

    前面两篇博文已经实现了电机测速和PID速度环控制 在这篇博文中 我们主要说明位置环的代码怎么写以及PID参数怎么调 1 位置环代码实现 写完速度环后位置环就很简单了 在串级PID中 内环的控制量一般是外环控制量的微分 在我们这里 外环是控制
  • 简单图像处理——旋转、缩放、保存

    简单图片处理 一 实验要求 对任意一幅图片分别设计以下两个功能函数 1 任意放大或缩少多少倍 显示图片 存储图片 2 对图片实现任意的旋转 显示图片 存储图片 并调用上面两个函数 测试实现放大2倍和旋转45度 二 实验准备 opencv库
  • (Xcode) 編譯器小白筆記 - LLVM前端Clang

    转自 https juejin im post 6844903716709990414 做笔记之用 Xcode 編譯器小白筆記 LLVM前端Clang 本文为笔记型式呈现 并非全部原创 来源见文末 Compiler Clang LLVM A
  • vector容器与iterator迭代器

    vector容器 vector 是同一种类型的对象的集合 每个对象都有一个对应的整数索引值 和 string 对象一样 标准库负责管理存储元素的相关内存 我们把 vector 称为 容器 是因为它可以包含其他对象 一个容器中的所有对象都必须