热点:

    C++ vector容器详解

      [   原创  ]   作者:
    收藏文章 暂无评论

    vector是C++标准模板库中的动态数组容器。

    1、 Vector采用动态数组存储数据。

    2、 vector扩容时,容量会以当前大小的两倍进行增长。

    3、 vector会分配连续的内存区域,扩容时不会在原空间上直接扩展,而是申请更大的新内存空间,将原有元素逐一复制到新位置,随后释放旧内存。

    4、 操作容器时应立即更新迭代器,因原指向旧内存的迭代器已失效。

    5、 vector是连续存储的线性数据结构。

    6、 通过三个迭代器分别指向线性空间的不同区域范围进行操作。

    7、 声明迭代器变量

    8、 {

    9、 ...

    10、 };

    11、 其中,

    12、 首个指针指向存储区域的起始位置

    13、 指向已使用空间末尾位置的指针

    14、 End:指向内存容量末尾位置的指针

    15、 示例一:一减一

    16、 ...

    17、 vector初始化时分配6个内存空间,用于存储data的6个元素。

    18、 当插入第7个元素6时,vector会通过扩容机制自动重新分配内存空间。

    19、 数据存储结构所示

    20、 分析:

    21、 当插入第七个元素时,vector原有容量不足,自动申请容量为12的新内存空间,将原数据复制至新空间前部,随后在末尾插入第七个元素。

    22、 此时_Last指向序列中最后一个有效元素的位置。

    23、 _End迭代器指向vector最后一个有效元素的下一位置。

    24、 通过调用vector的size成员函数可获取其当前大小,结果为7。

    25、 通过调用capacity成员函数,可获取vector当前容量,其值为12。

    26、 vector构造函数的原型定义

    27、 默认构造函数,创建一个空的vector对象。

    28、 创建一个包含n个元素的vector对象,每个元素的值均为v,若未指定v则使用T类型的默认值。该构造函数显式声明,防止隐式类型转换。

    29、 vector中所有存储的对象均已初始化。

    30、 若未指定存储对象的初始值,内置类型将默认初始化为0。

    31、 类类型将通过调用默认构造函数完成初始化。

    32、 若无默认构造函数,必须显式提供元素的初始值。

    33、 示例:

    34、 创建一个空的容器v1,用于存储字符串类型的数据。

    35、 创建一个包含10个字符串对象的容器,每个字符串均具有初始值(空字符串)。

    36、 创建一个包含5个字符串元素的容器,每个元素的初始值均为hello。

    37、 创建一个名为v4的字符串向量,其内容从v3的起始位置复制到结束位置,从而实现v3的完整副本。

    38、 vector的成员函数包括添加、删除、访问等操作。

    39、 判断容器是否为空,若空则返回真,否则返回假。

    40、 返回容器所能容纳元素的最大数量,该值由容器类型决定,通常在初始化后保持不变。

    41、 返回容器内当前存储的元素数量。

    42、 返回容器当前可容纳的元素数量,表示存储空间的上限。

    43、 容量不小于当前大小,满足条件。

    44、 预留至少n个元素的存储空间,若当前容量小于n则重新分配内存,保证后续插入时无需频繁扩容,提升容器性能。

    45、 调整容器大小至n,若原尺寸小于n,则以元素x的值填充新增部分;否则截断多余元素。调用后保证容器大小等于n,其中x为可选参数,默认为T类型的默认值。

    46、 返回容器内首个元素的引用,要求容器不能为空。

    47、 返回容器中最后一个元素的引用,要求容器不能为空。

    48、 返回指定位置元素的引用,位置索引从0开始。若提供的索引超出有效范围,则行为未定义。此操作不进行边界检查,调用时需确保索引合法。

    49、 返回指定位置pos处元素的引用,若pos超出容器有效范围,则抛出out_of_range异常。该操作会进行边界检查,确保访问安全。

    50、 返回指定位置pos处的元素引用,若位置超出范围则抛出异常,用于常量对象的安全访问。

    51、 在容器的末尾添加一个指定元素,传入的参数为待添加元素的常量引用。

    52、 移除容器末尾的元素,调用前需确保容器不为空。

    53、 插入与删除操作会引起元素位置变动,可能导致之前获取的迭代器失效,请谨慎使用。

    54、 在指定位置之前插入元素,返回指向新插入元素的迭代器。若未指定元素值,则插入默认构造的对象。该操作将原位置及之后的元素依次后移。

    55、 在指定位置插入 n 个元素 x,插入后原迭代器可能失效,请谨慎使用。

    56、 删除指定位置的元素,随后返回被删元素下一个位置的迭代器;若之后无元素,则返回指向末尾的迭代器。

    57、 删除指定范围内的元素后,被删除位置之后的所有元素对应的迭代器将失效,需谨慎使用,避免后续操作中访问无效迭代器导致未定义行为。

    58、 清空容器内容,功能等同于调用 erase( begin(), end() ),将所有元素移除。

    59、 将容器中的所有元素替换为由指定数量和值组成的序列,即用 n 个相同元素 x 来重新填充整个容器内容。

    60、 返回指向序列起始位置的常量迭代器,用于遍历容器中的元素。

    61、 调整容器大小可能导致原有迭代器失效。

    62、 比较两个vector对象是否相等的非成员函数操作

    63、 六种比较运算符

    64、 其中,

    65、 当两个vector对象的元素数量相同,且对应位置的元素值均相等时,它们被视为相等;反之则不相等。这一规则适用于判断vector对象是否相等或不等的操作。

    66、 使用字典序规则对 operator<、operator<=、operator> 和 operator>= 进行比较判断。

    67、 vector常用操作详解

    68、 包含vector相关功能的头文件

    69、 使用标准命名空间,这是编程中必不可少的步骤。

    70、 创建vector对象的方法

    71、 声明一个int类型的一维动态数组vec。

    72、 用于存储三维点坐标的二维数组结构,外层为向量容器,内层存储具体点数据,形成多层次的点集集合。

    73、 尾部添加数字

    74、 通过下标访问vector元素,下标值从零起始。

    75、 {

    76、 }

    77、 遍历容器中的容器,即处理二维数组结构。

    78、 遍历大容器中的每个元素,从索引0开始,逐个处理mVecPoint中的所有点数据。

    79、 {

    80、 遍历小容器中的每个元素,依次处理 mVecPoint 的所有数据项。

    81、 {

    82、 }

    83、 }

    84、 创建一个二维动态数组

    85、 {

    86、 {

    87、 }

    88、 }

    89、 {

    90、 {

    91、 }

    92、 }

    93、 通过迭代器遍历访问元素

    94、 添加元素

    95、 在向量的第 i 个位置前插入元素 a,a 将成为新的第 i+1 个元素,原位置及之后的元素依次后移一位。

    96、 移除指定元素

    97、 删除容器中索引为2的元素,即移除第三个位置上的数据内容。

    98、 vector中的元素可为任意数据类型。

    99、 包括二维浮点坐标点、双精度坐标点、动态数组及自定义结构体等数据类型。

    100、 容器存储自定义数据类型

    101、 定义一个自定义类

    102、 {

    103、 };

    104、 创建一个用于存储类的容器。

    105、 vector存储结构体常用两种方式:直接存储对象或存储对象指针。

    106、 方法一:传递结构体变量的副本。

    107、 方法二:传入指向结构体变量的指针。

    108、 设结构体类型变量如下所示

    109、 {

    110、 性别(字符型变量)

    111、 示例:

    112、 所示

    113、 向量排序:对元素进行升序排列

    114、 当vector中存储基本数据类型时,可使用std::sort()函数实现升序或降序排列。

    115、 将容器 vi 中的元素按升序排列,默认从小到大排序。

    116、 将向量vi中的元素顺序反转,实现从大到小的排列。

    117、 从大到小排序比较

    118、 设定排序比较规则

    119、 {

    120、 }

    121、 调用sort(vec.begin(), vec.end(), Comp)即可实现降序排列。

    122、 当vector中存储自定义结构体时,如何实现升序和降序排序?

    123、 两种方式可选

    124、 调整结构体或类的定义,重写排序函数逻辑以实现自定义排序功能。

    125、 在类或结构体外部定义函数,通过sort调用该函数实现排序功能。

    126、 所示

    soft.zol.com.cn true https://soft.zol.com.cn/1128/11282803.html report 5939 vector是C++标准模板库中的动态数组容器。 1、 Vector采用动态数组存储数据。 2、 vector扩容时,容量会以当前大小的两倍进行增长。 3、 vector会分配连续的内存区域,扩容时不会在原空间上直接扩展,而是申请更大的新内存空间,将原有元素逐一复制到新位置,随后释放旧...
    不喜欢(0) 点个赞(0)
    随时随地资讯查报价 就上ZOL手机客户端,点击或扫描二维码下载
    立即下载

    AlgoLab Raster to Vector Conversion Toolkit

    更新时间:2009年06月25日

    用户评分:0 | 0人点评

    软件类型:共享软件

    软件语言:英文

    AlgoLab Raster to Vector Conversion Toolkit
    • 更新时间:2009年06月25日
    • 软件大小:1.7MB
    • 软件分类:图像处理
    • 语言种类:英文
    • 软件评级:0 人点评