C++vector类

文章目录

  • C++vector类
    • 一、vector定义
    • 二、容器特性
      • 1.顺序序列
      • 2.动态数组
      • 3.能够感知内存分配器的(Allocator-aware)
    • 三、基本成员函数
      • 1.构造函数
      • 2.增加函数
      • 3.删除函数
      • 4.遍历函数
      • 5.大小和容量
      • 6.其他函数
      • 7.元素访问
    • 四、vector 示例程序

一、vector定义

  • 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

  • vector 是定义于名称空间 (namespace ) std 内的模板, 其定义在头文件 < vector > 中。其原型为:

    template < class T, class Allocator = allocator < T >> class vector;
    

二、容器特性

1.顺序序列

顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

2.动态数组

支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。

3.能够感知内存分配器的(Allocator-aware)

容器使用一个内存分配器对象来动态地处理它的存储需求。

三、基本成员函数

1.构造函数

  • 无参数 - 构造一个空的vector

    vector<类型>();
    
  • 数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector

    vector<类型>( size_type num, const TYPE &val );
    
  • vector(from) - 构造一个与vector from 相同的vector

    vector<类型>( const vector &from );
    
  • 迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间元素的Vector(注:半开区间).

    vector<类型>( input_iterator start, input_iterator end );
    

2.增加函数

  • 向量尾部增加一个元素X

    void push_back(const T& x);
    
  • 向量中迭代器指向元素前增加一个元素x

    iterator insert(iterator it,const T& x);
    
  • 向量中迭代器指向元素前增加n个相同的元素x

    iterator insert(iterator it,int n,const T& x);
    
  • 向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据

    iterator insert(iterator it,const_iterator first,const_iterator last);
    

3.删除函数

  • 删除向量中迭代器指向元素

    iterator erase(iterator it);
    
  • 删除向量中[first,last)中元素

    iterator erase(iterator first,iterator last);
    
  • 删除向量中最后一个元素

    void pop_back();
    
  • 清空向量中所有元素

    void clear();
    

4.遍历函数

  • 返回向量头指针,指向第一个元素

    iterator begin();
    
  • 返回向量尾指针,指向向量最后一个元素的下一个位置

    iterator end();
    
  • 反向迭代器,指向最后一个元素

    reverse_iterator rbegin();
    
  • 反向迭代器,指向第一个元素之前的位置

    reverse_iterator rend();
    

5.大小和容量

  • 判断向量是否为空,若为空,则向量中无元素

    bool empty() const;
    
  • 返回向量中元素的个数

    int size() const;
    
  • 返回当前向量所能容纳的最大元素值

    int capacity() const;
    
  • 返回最大可允许的vector元素数量值

    int max_size() const;
    
  • resize() 函数改变当前vector的大小为size,且对新创建的元素赋值val

    void resize( size_type size, TYPE val );
    
  • reserve()函数为当前vector预留至少共容纳size个元素的空间.

    void reserve( size_type size );
    

6.其他函数

  • 交换两个同类型向量的数据

    void swap(vector&);
    
  • 设置向量中前n个元素的值为x

    void assign(int n,const T& x);
    
  • 向量中[first,last)中元素设置成当前向量元素

    void assign(const_iterator first,const_iterator last);
    
  • get_allocator() 函数返回当前vector的内存分配器.

    allocator_type get_allocator();
    

7.元素访问

  • c[index]的返回值是引用类型。该函数既可以取出元素, 也可以对元素赋值,但必须 确定下标是有效的。

  • 返回pos位置元素的引用

    reference at(int pos);
    
  • 返回首元素的引用

    reference front();
    
  • 返回尾元素的引用

    reference back();
    

四、vector 示例程序

  • 1.用vector实现二维数组

    #include <iostream>
    #include <vector>
    using namespace std;
    int main()
    {vector<vector<int>> v(3);//v有3个元素,每个元素都是vector<int> 容器for (int i = 0; i < v.size(); ++i)for (int j = 0; j < 4; ++j)v[i].push_back(j);for (int i = 0; i < v.size(); ++i){for (int j = 0; j < v[i].size(); ++j)cout << v[i][j] << " ";cout << endl;}return 0;
    }
    

    程序输出结果:
    0 1 2 3
    0 1 2 3
    0 1 2 3

  • 2.vector 示例程序

    #include <iostream>
    #include <vector>
    using namespace std;
    template <class T>
    void PrintVector(T s, T e)
    {for (; s != e; ++s)cout << *s << " ";cout << endl;
    }
    int main()
    {int a[5] = {1, 2, 3, 4, 5};vector<int> v(a, a + 5); //将数组a的内容放入vcout << "1) " << v.end() - v.begin() << endl;//两个随机迭代器可以相减,输出 1) 5cout << "2) ";PrintVector(v.begin(), v.end());//2) 1 2 3 4 5v.insert(v.begin() + 2, 13); //在begin()+2位置插入 13cout << "3) ";PrintVector(v.begin(), v.end());//3) 1 2 13 3 4 5v.erase(v.begin() + 2); //删除位于 begin() + 2的元素cout << "4) ";PrintVector(v.begin(), v.end());//4) 1 2 3 4 5vector<int> v2(4, 100); //v2 有4个元素,都是100v2.insert(v2.begin(), v.begin() + 1, v.begin() + 3);//将v的一段插入v2开头cout << "5) v2: ";PrintVector(v2.begin(), v2.end());//5) v2: 2 3 100 100 100 100v.erase(v.begin() + 1, v.begin() + 3);//删除 v 上的一个区间,即 2,3cout << "6) ";PrintVector(v.begin(), v.end());//6) 1 4 5return 0;
    }
    

【C++入门】C++ vector类相关推荐

  1. 使用Vector类编程

    一个array(数组)就像是把一套变量组织在一起的容器.单个数组可以含有许多不同的值.你可以储存和取得数组中的单个值(也就是数组elements(元素)).你也可以通过直接操作数组变量来成组地使用其值 ...

  2. C++ 笔记(23)— STL vector 类(实例化 vector、末尾插入、指定位置插入、数组方式访问元素、指针方式访问元素、删除元素、大小与容量区别)

    1. vector 特点 vector 是一个模板类,提供了动态数组的通用功能,具有如下特点: 在数组末尾添加元素所需的时间是固定的,即在末尾插入元素的所需时间不随数组大小而异,在末尾删除元素也如此: ...

  3. 【stanford C++】容器III——Vector类

    主要介绍如下5个容器类--Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型.另外,各个类都是一些简单类型的值的集合,所以称它们为容器类. 暂且我们先不需要知道它们 ...

  4. java向量vector类,java数据结构——Vector(向量类)

    Vector底层是用数组实现的,其容量是可以动态扩展的,默认初始容量是10,默认增长因子是0,详细的扩容方式会在构造方法中讲述. Vector对象和ArrayList一样可以随意插入不同类的对象,因为 ...

  5. Lucene4 入门(2)–Field类及辅助类说明

    2019独角兽企业重金招聘Python工程师标准>>> Lucene4 入门(2)–Field类及辅助类说明 一.Eclipse中Field类的继承关系图: 二.Field类 1.  ...

  6. 黑马程序员--打印流、序列输入流、Vector 类

    --------- android培训.java培训.期待与您交流! --------- 1 打印流 打印流: 该流提供了打印方法,可以将各种数据类型的数据都原样打印. 字节打印流: PrintStr ...

  7. 利用std::allocator实现自定义的vector类

    std::allocator即空间配置器,用于内存分配.更多的细节建议大家研究相关源码. 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正. 1 #inclu ...

  8. C++ vector类详解

    转自http://blog.csdn.net/whz_zb/article/details/6827999 vector简介 vector是STL中最常见的容器,它是一种顺序容器,支持随机访问.vec ...

  9. 【C++grammar】vector类和字符串字面量

    C++的vector类 用数组存放数据时,容量大小不可变,vector对象容量可自动增大. vector的操作: 调用push_back函数时,vector对象的容量可能会增大. 观察下列操作对vec ...

最新文章

  1. 「鸡娃」是家长无处安放的「应试」焦虑
  2. springmvc二十三:日期格式化
  3. python+mysql:实现一千万条数据插入数据库
  4. 数据库mysql建立索引_为mysql数据库建立索引
  5. 网站搭建从零开始(一)域名
  6. JQuery ajax()实例
  7. 数据恢复软件(绝对真实可用)
  8. 中resource文件夹的作用_冲突与碰撞:OpenStack中的虚拟机和裸机
  9. [机器学习] 混淆矩阵和kappa系数
  10. 虚拟网站禁用php,PHP虚拟主机建议禁用函数列表
  11. Python-pyautogui qq自动发送消息,微信自动发送消息,适用于任何聊天窗口
  12. 【微信聊天机器人】基于python实现的PC端个人微信聊天机器人
  13. 【数学建模】模型的评价、模型的推广与改进
  14. Element-Ui组件 Radio 单选框 修改点击激活时的文本颜色,填充色和边框色
  15. ps cs6选择并遮住在哪设置
  16. 外贸SOHO如何收款-跨境知道
  17. Python爬取‘跌妈不认’股票数据,绘制可视化图
  18. “上升”华为碰撞“下降”联想
  19. 利用 RDP Wrapper 实现 Android 平板变身 Windows 平板
  20. 关于webpack下载loader时遇到的问题

热门文章

  1. 阿里云服务器如何快速搭建Docker环境
  2. java对象复制_Java对象的深层复制与浅层复制
  3. python精确有理数实验_Python3标准库:fractions有理数
  4. c语言游戏角色建立,(c语言)游戏中由人物各种信息组成的结构体
  5. pythoncontinue函数_Python continue语句
  6. IntelliJ IDEA 快捷键 Windows
  7. python中unitest_基于Python的unitest框架介绍
  8. win7关闭开机启动项_电脑开机非常慢?原来是有软件偷偷自启动,教你一招彻底关闭它们...
  9. c++ map初始化_Java多线程 未完成初始化--构造方法中新建线程
  10. 对于计算机专业的调查报告,计算机专业调查报告.doc