我们以 vector、deque 和 list 为例介绍基本序列式容器,先来看一个关于 vector 容器的例子。

#include <iostream>
#include <vector>
using namespace std;
int main()
{vector< int > num;num.push_back( 50 );num.insert(num.begin(), 10);num.insert(num.end(), 20);num.push_back( 60 );num.push_back( 40 );cout << num.size() << endl;for(int i = 0; i < num.size(); i++)cout << num[i] << " ";cout << endl;num.erase(num.begin());cout << num.size() << endl;for(int i = 0; i < num.size(); i++)cout<< num[i] <<" ";cout << endl;return 0;
}

vector 可以理解为可以在两端插入、删除数据的数组,它提供了丰富的成员函数,用于操作数据。在使用 vector 时,必须包含头文件。

我们接着来看一下主函数。我们定义了一个 vector 类的 int 型实例 num,需要注意的是我们并没有指定实例的大小,因为 vector 是可以根据需求自动调整大小的,这一点跟数组不同。接下来我们调用函数 push_back(),该函数时在 vector 实例 num 的最后添加一个元素,因为一开始定义的时候为空,因此此时的 num 中只包含一个元素 50。

之后我们再调用 insert() 函数,该函数可以在指定位置插入元素。在 insert() 函数参数中,我们分别调用了 begin() 和 end() 函数,这两个函数分别用来访问 num 实例的头部和尾部:
begin() 函数返回的是一个迭代器,如果容器不为空,则返回的迭代器指向容器的第一个元素;如果容器为空,则返回的迭代器指向容器尾部之后的位置。
end() 函数同样返回的是一个迭代器,该迭代器指向的是容器尾部之后的位置。

当容器为空时,begin() 函数和 end() 函数都指向同一个位置,当容器有一个元素的时候,begin() 函数指向第一个元素的位置,end() 函数则指向第一个元素之后的位置。

调用 insert() 函数时,如果不是在容器尾部插入元素,则需要将所插入位置以后的元素都向后移一位,然后再将需要插入的元素插入到当前位置。例如,我们要在开头插入一个元素,则需要将容器现有的元素都向后移动一个位置,然后再将元素插入到第一个位置,因此 vector 在非尾部位置插入元素的效率不高。

在主函数中调用两次 insert() 函数之后,此时 num 容器中的元素有:10,50,20。之后又调用了两个 push_back() 函数,在容器尾部插入了两次数据,容器中的数据按顺序依次为:10,50,20,60,40。之后调用 size() 函数,返回容器的大小,因为此时容器中包含五个元素,因此返回值为 5。接下来我们将容器中的元素一一打印出来,我们可以通过下标操作符访问容器中的元素,打印结果为:10,50,20,60,40。

接下来调用 erase() 函数删除容器中的元素,删除位置是容器第一个元素,删除之后,该位置就会空出,此时后面的元素需要全部向前移动一个位置。此时容器中的元素按顺序一次为:50,20,60,40。

C++基本序列式容器 vector (一)相关推荐

  1. 容器大小_C++复习篇(7)序列式容器vector

    点击蓝字 关注我们 主要内容 本篇内容主要介绍STL六大组件之一的序列式容器(vector),容器其实就是各种数据结构:另外,迭代器部分的内容可以看看<STL源码剖析>,它的的主要作用是作 ...

  2. STL源码剖析 序列式容器|Vector

    容器的概观和分类 array 数组 .list 链表.tree树 .stack堆栈.queue队列.hash table散列表.set集合.map映射表 根据数据在容器中的排列顺序,将上述数据结构分为 ...

  3. STL浅析——序列式容器vector的数据结构

    vecotr 一词原来的意思是:矢量,向量,航向,顾名思义指的就是类似于数组的一个存储数据的序列,因此所采用的数据结构非常简单:连续的线性空间,它以两个迭代器 _M_start 和 _M_finish ...

  4. c++ 将deque部分元素赋值给vector_《STL源码剖析》学习笔记——序列式容器vector

    目录 1.容器的概观与分类 2.vector概述 2.1 vector 的迭代器 2.2 vector数据结构 2.3 vector构造与内存管理 2.4 vector的元素操作 1.容器的概观与分类 ...

  5. STL源码剖析 序列式容器 vector 和 ilist

       Vector                 list             单向链表 ilist list的删除操作,也只有指向被删除元素的迭代器会失效,其他迭代器不会受到影响

  6. C++ STL容器——序列式容器(array、vector、deque、list)

    概述 1.C++ STL的容器分为三种,序列式容器,关联式容器,无序式容器,这里先说说常用的序列式容器. 2.array,vector,deque,list,forward_list这几种都是序列式容 ...

  7. 【C++ STL学习笔记】C++ STL序列式容器(array,vector,deque,list)

    文章目录 C++ STL容器是什么? 迭代器是什么,C++ STL迭代器(iterator)用法详解 迭代器类别 迭代器的定义方式 C++序列式容器(STL序列式容器)是什么 容器中常见的函数成员 C ...

  8. 第四章 序列式容器(sequence containers)

    序列式容器(sequence containers) 1.容器的概观与分类 2.vector 3.list 4.deque 5.stack 6.queue 7.heap(隐私表述,implicit r ...

  9. STL序列式容器Standard Template Library Sequence Container

    STL序列式容器 STL Sequence Container 目录 STL序列式容器 STL Sequence Container STL(Standard Template Library)概述 ...

最新文章

  1. 如何保证MySQL和Redis的数据一致性?
  2. Linux_PXE服务器_RHEL7
  3. (C++)从本机获取WMI数据.
  4. Qt中如何获取系统图标
  5. 获取当前目录所有文件名 并且保存为1个00000.txt的文件文件bat
  6. 锐捷交换机清除mac-address-table(mac地址表)
  7. tornado项目搭建_Day71-73 BBS项目(1)
  8. 机器学习的Agile过程
  9. CListCtrl的用法总结
  10. Flex Accordion 和 TabNavigator组件浏览器跳转问题
  11. 正弦波 程序 角度传感器_激光位移传感器的原理及应用领域
  12. 企业如何考虑自己的网络防护设备
  13. 《TensorFlow 2.0深度学习算法实战教材》学习笔记(一、人工智能绪论)
  14. 如何在svn上新建一个目录并赋予相应的权限
  15. java IDEA 修改jar包中某个文件 并生成新jar包
  16. nsurl转nsdata_ios 中NSData 拼接成功,但写入本地种只有前面的data
  17. 图表背后的秘密 | 技术指标讲解:布林带指标
  18. Tableau零基础教程
  19. Flink Window TOPN: The window can only be ordered in ASCENDING mode.
  20. Git ssh key的生成,由于SSH配置文件的不匹配,导致的Permission denied (publickey)及其解决方法

热门文章

  1. 数据结构-js实现栈和队列
  2. phoenix hbase Can't get master address from ZooKeeper; znode data == null
  3. 聊聊flink的Tumbling Window
  4. Django内置分页扩展
  5. docker数据卷备份恢复以及配置桥接网络
  6. windows phone (23) ScrollViewer元素
  7. 售后服务成OA品牌竞争重要因素
  8. DiscuX END - 553 Envolope sender mismatch with header from..
  9. C#泛型对类型参数的推断
  10. web页面事件无响应,元素点击不到