C++入门之vector使用详解

目录
  • 前言
  • 创建对象
  • 迭代器
  • 数据插入
  • 数据删除
  • 容量操作
  • 总结

前言

兜兜转转,我们来到了C++的vector章节,今天就讲讲怎么使用vector吧.

vector的本质就是一个线性的顺序表,只不过在C++中被弄成了模板,以达到泛型编程目的.而使用的方面大概包括创建对象,数据插入,数据删除,数据访问,迭代器以及容量修改等方面

创建对象

在C++中,官方文档所给的创建对象方法有4-6种,博主这里便介绍其中最常用的4种,同时博主为了大家先能够简单使用,会省去一些与源文档不一样的地方.

直接创建,即和类定义对象一样,官方声明为:explicit vector ();,其中explict是指不支持隐式类型转换.

示例:

vector<int> v1;          //创建int类型顺序表 v1;
vector<char> v2;         //创建char类型顺序表 v2;
vector<double> v3;       //创建double类型顺序表 v3;

通过传n个val值定义对象,达到一创建对象就具有n个val,官方声明为:explicit vector (size_type n, const value_type& val = value_type();,其中value_type就是我们需要的类型…

示例:

vector<int> v1(10,9);    //创建int类型顺序表v1,里面有10个9;
vector<int> v2(v1.begin(),v1.begin()+6);   //创建int类型顺序表v2,里面有6个9;

通过迭代器区间形式创建对象,官方声明为:template <class InputIterator> vector (InputIterator first, InputIterator last).

示例:

vector<int> v1(10,9);    //创建int类型顺序表v1,里面有10个9;
vector<int> v2(v1.begin(),v1.begin()+6);   //创建int类型顺序表v2,里面有6个9;

通过现成的同类型对象创建对象,官方声明为:vector (const vector& x);.

示例:

vector<char> v1(10,9);   //通过前面的方法创建一个对象;
vector<char> v2(v1);     //创建对象v2,其内容与v1一模一样.

迭代器

在经过前几节的string洗礼,相信大家对迭代器也算比较了解,这里就直接开门见山的介绍用法吧:

  • 普通迭代器接口:分别是begin()end();其中begin()为首元素位置,end()为末元素位置下一个位置
  • 反转迭代器接口:分别是rbegin()和rend();其中rbegin()是末元素位置,rend()是首元素前一个位置.

示例:

vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);    //这四个步骤大概意思为插入 1 2 3 4
vector<int>::iterator it = v1.begin();
while(it != v1.end())
{
    cout<<*it<<" ";
}
cout<<endl;              //到这一步会输出 1 2 3 4
it = v1.rbegin();
while(it != rend())
{
    cout<<*it<<" ";
}
cout<<endl;              //到这一步会输出4 3 2 1

数据插入

在数据插入方面,C++最常用的两个函数接口分别是insert和push_back.前者是在目标位置前插入,后者是进行尾插;

尾插 ,即对象直接调用push_back(),然后传值进去.

vector<int> v1;    //先创建一个对象.
v1.push_back(1);   //尾插数据1
v1.push_back(2);   //尾插数据2
v1.push_back(3);   //尾插数据3
// 现在v1的数据内容情况为 1  2  3

而任意位置插入最常用的有3种,分别是

  • 在pos位置直接插入一个元素,pos是一个迭代器
  • 在pos位置直接插入n个元素,pos是一个迭代器
  • 在pos位置插入一段区间(区间用迭代器表示),pos是一个迭代器

示例:

数据删除

在删除数据方面,主要有两个接口,分别是erase()和pop_back(),前者是给一个迭代器,然后删除.后者是尾删,不需要参数

尾删:

vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.pop_back();  //尾删元素4
v1.pop_back();  //尾删元素3
v1.pop_back();  //尾删元素2
//目前该容器还剩下元素 1

传迭代器形式删除

vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.erase(v1.begin());      //删除第一个元素1
v1.erase(v1.begin()+1);    //删除现在容容器的第二个元素3
//目前还剩下元素2 4

容量操作

在这方面,c++提供了size(),resize(),capacity(),empty()几个常用操作.

  • 获取目前元素数量
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.size();   //获取到元素数量为4个

重新调整大小,其中如果传入的n小于原来的size,那么容器就会缩减到n,同时传入的另外参数无效;如果n大于size,就会扩大到n,参数有效,和string的使用一样. 官方文档为:void resize (size_type n, value_type val = value_type());

示例:

vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.resize(3,0);   //只会缩减到3个size,传入的另一个0无效
v1.resize(6,9);   //现在6大于size:3,所以9有效
//现在内容为1 2 3 9 9 9

获取容量

vector<int> v1;
v1.capacity();  //注意哦~,这个容量和size并不一样.

判断是否为空

示例:

vector<int> v1;
if(v1.empty())
{
    cout<<"容易为空"<<endl;
}
else
{
    cout<<"容器不为空"<<endl;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++ vector容器 find erase的使用操作:查找并删除指定元素

    概念:容器.迭代器.算法 STL包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优缺点,不同的容器反映出程序设计的不同需求.容器自身可能由数组或链表实现,或者容器中的每个元素都有特殊的关键值. 迭代器 用于遍历一个数据集中的每个元素.这些数据集可能是容器或者容器的子集.迭代器的主要优点是它们为任意类型的容器提供一个小巧并且通用(注意通用很重要)的接口.例如,迭代器接口的一个操作是让它依次遍历数据集的每个元素.这个操作是依赖容器的内总部结构独立完成的.迭代器之所以有效是

  • c++中为什么不提倡使用vector示例详解

    vector< bool> 并不是一个STL容器,不是一个STL容器,不是一个STL容器! 首先vector< bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题. 早在C++98的时候,就有vector< bool>这个类型了,但是因为当时为了考虑到节省空间的想法,所以vector< bool>里面不是一个Byte一个Byte储存的,它是一个bit一个bit储存的! 因为C++没有直接去给一个bit来操作,所以用operator[]

  • C++ STL入门教程(1) vector向量容器使用方法

    一.简介 Vectors 包含着一系列连续存储的元素,其行为和数组类似. 访问Vector中的任意元素或从末尾添加元素都可以在O(1)内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是O(N). 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <vector> #include <iostream> #include <algorithm> #include <stdexcept> using namespace

  • C++(STL库)之顺序容器vector的使用

    一.特点 ①总的来说:可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢 ②元素保存在连续的内存空间中,因此通过下标取值非常快 ③在容器中间位置添加或删除元素非常耗时 ④一旦内从重分配,和原vector相关的指针,引用,迭代器都失效.内存重分配耗时很长 二.头文件.using声明 头文件:#include <vector> using声明:using std::vector; 三.初始化 vector<T>  v1; ==>v1是一个空的vector ve

  • C++ vector使用的一些注意事项

    1. 初始化 c++ 11以后新增了大括号{}的初始化方式,需要注意与()的区别,如: std::vector<int> vecTest1(5);         //初始化5个元素,每个都是0 std::vector<int> vecTest2{ 5 };       //初始化1个元素,值是5 2.  添加元素:push_back 通过push_back添加新的元素进入vector后,vector的内存有时候会发生变化,这取决于size和capacity大小,当然这些都是系统来

  • c++中vector的使用和模拟实现

    一.接口介绍 1.插入数据 void push_back(const T& x) 在当前vector尾部插入x,如果容量不够扩大二倍. iterator insert(iterator pos, const T& x) 在POS位置插入元素x 2.容量相关 size_t capacity() 返回当前vector的容量(size+剩余容量) size_t size() 返回当前vector的元素个数 void resize(size_t n, const T& val = T())

  • C++入门之vector使用详解

    目录 前言 创建对象 迭代器 数据插入 数据删除 容量操作 总结 前言 兜兜转转,我们来到了C++的vector章节,今天就讲讲怎么使用vector吧. vector的本质就是一个线性的顺序表,只不过在C++中被弄成了模板,以达到泛型编程目的.而使用的方面大概包括创建对象,数据插入,数据删除,数据访问,迭代器以及容量修改等方面 创建对象 在C++中,官方文档所给的创建对象方法有4-6种,博主这里便介绍其中最常用的4种,同时博主为了大家先能够简单使用,会省去一些与源文档不一样的地方. 直接创建,即

  • C++中vector操作方式详解(多种方式)

    1. vector: 1.1 vector 说明 vector是向量类型,可以容纳许多类型的数据,因此也被称为容器 (可以理解为动态数组,是封装好了的类) 进行vector操作前应添加头文件#include <vector> 1.2 vector初始化: 方式1. //定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定 vector<int>a(10); 方式2. //定义具有10个整型元素的向量,且给出的每个元素初值为1 vec

  • Python入门_条件控制(详解)

    条件控制其实就是if...else...(如果...条件是成立的,就做...:反之,就做...)的使用,其基本结构是: 具体看下面这个例子: def account_login(): # 定义函数 password = input('请输入密码:') # 输入密码 if password == '12345': # 如果输入密码是12345,则登录成功 print('登录成功') else: print('密码有误,请重新输入') # 否则提示密码有误,请重新输入 account_login()

  • C语言入门之基础知识详解

    一.思维导图 内容不限于此思维导图 二.环境搭建 对于老手,自动跳过这一趴吧,或者也可以看一下我有没有啥纰漏,毕竟小白需要这一趴. 编译器很多,大部分老师会在学生学习C语言的时候推荐使用VC,不带语言提示器的那种,说是可以提高学生的编码能力.我也不知道到底是不是这么一回事儿.我推荐使用VS,这样学的快,函数记不住的问题很严重吗?项目的车轮碾压过去,再记不住也得记住吧!!! 更何况这个系列到后面是会有需要用文本文件编程写项目的阶段. 下载VS2019社区版,不要标新立异选那些最新版的,出了问题到时

  • Python入门之基础语法详解

    一.我的经历及目标 在学习python之前:我学习过C/C++,在学校期间做过很多的项目,已经有两年多了,算是对C/C++非常的熟悉了,精通不敢说,但是对于面向过程和面向对象有很深刻的认识,做过很多的开发,学习数据库,MFC, QT, linux下利用C/C++进行服务器的开发,QT环境下进行模拟QQ的开发- 听说python挺火的,我也来尝试一门新的语言,python和c有80%的相似性,毕竟是用C来开发的语言,但是是面向过程的一门语言,有C++的继承等相似的特性,感觉更有信心学会它了,毕竟可

  • C语言入门篇--关键字static详解

    目录 1.修饰局部变量 1.1作用 1.2举例 (1)不加static (2)加static (3)静态局部变量的初始化只会进行一次 2.修饰全局变量 2.1作用 2.2举例 (1)不加static (2)加static 3.修饰函数 3.1作用 3.2举例 (1)不加static (2)加static 1.修饰局部变量 1.1作用 ststic修饰局部变量,会改变局部变量的生命周期,不改变作用域: 生命周期:和全局变量一样具有全局性,但在内存中的位置没有改变,还在在静态存储区中. 作用域:作用

  • Django零基础入门之模板变量详解

    引言: 我们在页面上会看到,谁登录的就会显示谁的信息,那么这个页面上的变量信息是怎样实现的呢? 这就是本文要讲述的内容--Django中的模板变量! 1.模板变量! 可以在前端页面中使用模板变量来取数据库中的数据,实现前端页面数据动态显示. (1)模板变量使用规则:(在HTML模板中使用!) 语法: {{ 变量名 }} 命名由字母和数字以及下划线组成,不能有空格和标点符号 可以使用字典.类对象.方法.函数.列表.字符串 不要和python或django关键字重名 注意: 如果data是一个字典,

  • Django零基础入门之常用过滤器详解

    引言: 前面讲过了Django中使用模板变量.使用很简单,那么有没有什么关于模板变量的骚操作呢? 答案是肯定有的,这就是本文要讲的--过滤器! 1.过滤器 (1)纯干货讲解: 作用: 对变量进行过滤.在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来. 语法:{{ fruits|lower }} 管道符号进行链式调用(可以理解为嵌套使用!),比如实现一个功能,先把所有字符变成小写,再把第一个字符转换成大写. 语法:{{fruits|lower|capfirs

  • C++模拟实现vector流程详解

    目录 模拟vector 总结 模拟vector 我们可以通过模板实现类似vector的类.我们实现一个StrVecTemp类,其内部通过allocator开辟空间,存储的类型用T来表示,T是模板类型. template <typename T> class StrVecTemp { public: StrVecTemp() : elements(nullptr), first_free(nullptr), cap(nullptr) {} //拷贝构造函数 StrVecTemp(const St

  • Python入门之列表用法详解

    目录 列表是什么 列表的CRUD 创建列表 访问列表中的值 更新列表 删除元素 拼接列表 列表相乘 判断 遍历列表 列表常用方法 获取列表长度 列表后面添加元素 指定位置添加元素 删除元素 返回的是某个元素在列表里面的个数 合并列表 返回的是元素在列表中的第一个位置 排序 将列表进行翻转 清除列表 浅拷贝列表 深拷贝列表 列表是什么 列表是元素的集合,存储在一个变量中. 列表中存储的元素类型没有限制,根据需要动态分配和回收内存 列表中的每个元素都会分配一个数字用来表示它的位置(索引),第一个索引

随机推荐