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. redis可视化客户端工具TreeNMS

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理.维护. 功能包括:状态参数监控,NoSQL数据库 ...

  2. System.Web.Mvc.HttpPatchAttribute.cs

    ylbtech-System.Web.Mvc.HttpPatchAttribute.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, ...

  3. Pascal 排序算法

    Pascal 排序   排序 排序就是将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程.排序问题是一个十分重要的问题,并且排序的方法有很多种: 例子:输入20个数,将它们按照从高到低的次序排 ...

  4. JS程序的基本语法

    JS程序的基本语法 JS是区分大小写的.如:Name和name是两个变量 JS中每一条语句,一般以英文下的分号(;)结束.这个分号不是必须的.为了向PHP兼容,最好加上分号. 运算符和变量,以及操作之 ...

  5. typedef void (*funcptr)(void) typedef void (*PFV)(); typedef int32_t (*PFI)();

    看到以下代码,不明白查了一下: /** Pointer to Function returning Void (any number of parameters) */ typedef void (* ...

  6. Spring IOC基础回顾 — 组件扫描和装配

    目录 注解形式配置应用IOC 1. 组件自动扫描 2. 组件依赖:为bean添加注解,实现自动注入 3. Spring IOC应用小结 注解形式配置应用IOC 在类定义.方法定义.成员变量定义前使用, ...

  7. 微信小程序 tabBar模板

    tabBar导航栏 小程序tabBar,我们可以通过app.json进行配置,可以放置于顶部或者底部,用于不同功能页面的切换,挺好的... 但,,,貌似不能让动态修改tabBar(需求:通过switc ...

  8. 滑雪 矩阵中的最长上升路径 /// 记忆化DFS || DP oj22919

    大致题意: Description 难怪Michael喜欢滑雪,因为滑雪确实很刺激.为了获得加速度,滑雪道必须向下倾斜,而且当滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一 ...

  9. selenium基础(警告框的处理)

    selenium基础(警告框的处理) 在webdriver中处理JavaScript所产生的的警告框有三种类型 alert confirm prompt 划转到警告框的方法是:driver.switc ...

  10. 踩坑记-java mysql 新增获取主键、DIY主键、UUID

    java mysql 获取主键.DIY主键.UUID,简单粗暴,代码如下: mapper.xml insert id="add" parameterType="com.x ...