vector容器的应用,感觉最近做的题目还用的挺多

vector与常用数组大部分是相同的,可以进行插入,删除之类的,但是,有些题目,用普通的数组就很容易爆掉,而vector可以动态的根据你所需要的来调整大小。

所以说vector向量不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容易,完全可以代替数组。

比如   一维数组  vector <int > v;

     二维数组  vector <int *> v;

     三维数组  vector <int **> v;

一些基本用语

erase              删除

insert              插入

begin              指向头指针

end                 指向尾元素+1的尾部位置

empty             判断是否为空

push_back     向容器尾部加入新的数字

pop_back       去掉容器最后一个数字

clear               清空整个容器

size                表示容器所包含的数字

首先最基本的,对于正常的容器进行最基本的插入数据方法

#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back();
v.push_back();
v.push_back();
return ;
}

还有另一种,直接用下标定义的   注意这个v(3) 与普通数组一样,是从0开始计数的,3代表大小。

vector <int > v();
v[]=;
v[]=;
v[]=;

接着,接触到了一种新东西,迭代器

具体什么原理也还没太清楚,但是大概知道,不论是vector还是string都可以用这种迭代器来表示长度之类的。

#include<vector>
#include<iostream >
using namespace std;
int main()
{
vector<int> v();
v[]=;
v[]=;
v[]=;
vector<int> :: iterator it; ///定义了一个迭代器变量
for(it=v.begin();it!=v.end();it++)
////从容器的首位开始便利到结束
{
cout<<*it<<" ";
}
cout<<endl;
return ;
}

接下来是元素的插入方法,用到了insert()

其可以再vector 对象的任意位置前插入一个新的元素,同时,vector 会自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置

要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。

#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v();
v[]=;
v[]=;
v[]=;
v.insert(v.begin(),); ////在最前面插入新元素,元素值为8。
v.insert(v.begin()+,); ////在第2个元素前插入新元素1。
v.insert(v.end(),); ///在向量末尾追加新元素3。
vector<int> :: iterator it;
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return ;
}

这组数据的输出结果是 8 ,2 ,1 ,7 ,9 ,3;2

元素的删除方法,用到了erase()或者clear()

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素

clear()方法则是一次性删除vector中的所有元素

代码如下

#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v();
for(int i=;i<;i++)
v[i]=i;
v.erase(v.begin()+); ///删除 2 个元素,从0开始计数
vector<int> :: iterator it;
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
v.erase(v.begin()+,v.begin()+);
///删除迭代器中第1 到第 5 区间的所有元素 (删除1 2 3 4 这4个)
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
v.clear();
cout<<v.size()<<endl;
return ;
}

运行结果是

0 1 3 4 5 6 7 8 9

0 6 7 8 9

0

使用reverser反向排列算法

在头文件algorithm下,代码如下

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int> v();
for(int i=;i<;i++)
{
v[i]=i;
}
reverse(v.begin(),v.end());/// 反向排列向量的从首到尾间的元素
vector<int> :: iterator it;
for(it=v.begin();it!=v.end();it++)
{
cout<<*it<<" "; }
cout<<endl;
return ;
}

输出结果是

9 8 7 6 5 4 3 2 1 0

使用sort算法对向量元素排序

sort默认为升序排列的,位于algorithm头文件下

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(int argc,char argv[])
{
vector<int> v;
int i;
for(i=;i<;i++)
{
v.push_back(-i);
}
for(i=;i<;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
sort(v.begin(),v.end()); //////升序排列
for(i=;i<;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
return ;
}

输出结果

9 8 7 6 5 4 3 2 1 0

0 1 2 3 4 5 6 7 8 9

但是,可以自己设计比较函数,然后把函数指定给sort算法,sort就按照自己所规定的规则进行排列。

例如自己设计一个比较函数Comp,对元素从大到小排序

#include<vector>
#include<iostream>
#include<algorithm>
using namespace std; bool Comp(const int &a,const int &b)
{
if(a!=b) return a>b;
else return a>b;
} /////降序排列 int main(int argc,char *argv[])
{
vector<int> v;
for(int i=;i<;i++)
{
v.push_back(i); }
for(int i=;i<;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
sort(v.begin(),v.end(),Comp); 按照Comp 函数比较规则排序
for(int i=;i<;i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
return ;
}

输出结果

0 1 2 3 4 5 6 7 8 9

9 8 7 6 5 4 3 2 1 0

向量容器大小的统计

使用size() 可以返回容器大小,即元素的个数

使用empty() 可以判断容器是否为空   如果为空则返回逻辑真实值 1 ,如果为非空则返回逻辑假 0。

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int> v();
for(int i=;i<;i++)
{
v[i]=i;
}
cout<<v.size()<<endl; ///输出向量的大小,即包含了多少个元素
cout<<v.empty()<<endl; ///如果为空则输出 1 ,如果非空则输出 0
v.clear();
cout<<v.empty()<<endl;
return ;
}

输出结果

10

0

1

以上大概就是vector的通常用法了。

vector容量器的应用的更多相关文章

  1. Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事

    本文投票地址:http://vote.blog.csdn.net/Article/Details?articleid=37834689 前天看到一个颇为纠结的选择题:有一天你遇到一个外星人,这时外星人 ...

  2. 算法设计与分析(李春保)练习题答案v2

    ----------------------------------------------------- Page 1 --------------------------------------- ...

  3. world.construct(me);

    目录 0 引言 0.1 所谓构造题 0.2 重点是动机 (motivation) 1 实践出真知 1.1 「CSP-S 2021」「洛谷 P7915」回文 1.1.1 题目大意 1.1.2 解题过程 ...

  4. Solution -「OurOJ 46544」漏斗计算

    \(\mathcal{Description}\)   Link.   定义一个运算结点 \(u\) 有两个属性:当前容量 \(x_u\).最大容量 \(V_u\).提供以下单元操作: I 读入一个整 ...

  5. C++ 序列式容器之vector

     什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array,  链表list,  树tree ...

  6. [知识点]C++中STL容器之vector

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...

  7. C++容器之Vector

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vect ...

  8. C++STL模板库序列容器之vector

    目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...

  9. STL容器之vector

    [1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...

随机推荐

  1. 关于延迟加载(lazy)和强制加载(Hibernate.initialize(Object proxy) )

    PO 即Persistence Object VO 即Value Object PO 和VO 是Hibernate 中两个比较关键的概念. 首先,何谓VO,很简单,VO 就是一个简单的值对象. 如:  ...

  2. Java学习之垃圾回收机制

    垃圾回收机制,依赖JRE和JVM,涉及操作系统中内存的分配与回收.依据所学,我猜想这种机制需要的数据结构是堆内存分配表(链),管理已分配和未分配的堆内存,对于已分配堆内存,需要知道由栈内存中的哪些变量 ...

  3. springboot新手脱坑之无法下载依赖包

    1. Apache maven 3.39配置 1.环境变量自己配置, 2.配置阿里云镜像和本地仓库 <localRepository>D:\Apache\maven\repository& ...

  4. SF Symbols 使用

    伴随着WWDC 2019 的举办,对于程序员而言 ,无疑SwiftUI 推出 是比较令人兴奋的一件事情, 其中在SwiftUI 使用之中, 我们经常使用以下系统图片 Image(systemName: ...

  5. vue中使用动画vue-particles实现背景粒子酷炫效果

    先来看我做的效果 我这个是用的背景色加上这个粒子效果实现的demo 平时我们做项目的话会添加背景图片这些,可能更加好看 看我的实现步骤 cnpm install -g vue-cli vue init ...

  6. Linux定时重启

      1.安装crontabyum install cixie-cron  yum install crontabs    2.编辑cron第一步,登陆账号第二步,输入crontab -e第三步,输入i ...

  7. token方法可用于临时关闭令牌验证,

    token方法可用于临时关闭令牌验证,例如: $model->token(false)->create(); 即可在提交表单的时候临时关闭令牌验证(即使开启了TOKEN_ON参数). 大理 ...

  8. java内存模型JMM理解整理

    什么是JMM JMM即为JAVA 内存模型(java memory model).因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且 ...

  9. 第十四章 Odoo 12开发之部署和维护生产实例

    本文中将学习将 Odoo 服务器作为生产环境的基本准备.安装和维护服务器是一个复杂的话题,应该由专业人员完成.本文中所学习的不足以保证普通用户创建应对包含敏感数据和服务的健壮.安全环境. 本文旨在介绍 ...

  10. lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(三) Nginx

    1.  安装 sudo apt-get install nginx 2. 配置nginx sudo gedit /etc/nginx/nginx.conf user www-data; worker_ ...