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. 使用Windbg调试系统弹出的内存不可读错误

    步骤: 1. 使用Windbg挂钩到崩溃的进程上面 2. 使用~*k列出所有线程 3. 搜索UnhandledExceptionFilter所在的线程 4. 使用~ns切换到上面崩溃所在的线程,n为线 ...

  2. 让delphi2010能有delphi7的版面布局

    如何让delphi2010能有delphi7的版面布局呢?答案是肯定的,方法如下: 1)在工具栏点右键,选择components 会看到delphi7中的组件显示面板 2)tools > opt ...

  3. fastjson 过滤不需要序列化的属性

    JSON JSON英文全称为JavaScriptObject Natation,采用key:value键值对的方式存贮数据,与xml格式相比,JSON是一种轻量级的数据交换格式:不要被JavaScri ...

  4. Git合并时遇到冲突或错误后取消合并

    当合并分支时遇到错误或者冲突,分支旁边会多出“|MERGING”这个东西 有这个状态存在时,会导致后面想要再合并的时候提示如下 所以需要先取消这次合并,使用“git merge --abort”命令

  5. C开发系列-字符串

    C语言字符串 C语言字符串本质是使用字符数组来存储的. #include <stdio.h> int main() { "jake"; // "jake&qu ...

  6. Shuffle过程详解

  7. 微信小程序前后台调用

    // pages/ruquestexer/index.js Page({ /** * 页面的初始数据 */ data: { }, getUserData:function(){ wx.request( ...

  8. Java虚拟机性能管理神器 - VisualVM(6) 排查JAVA应用程序内存泄漏【转】

    Java虚拟机性能管理神器 - VisualVM(6) 排查JAVA应用程序内存泄漏[转] 标签: javajvm内存泄漏监控工具 2015-03-11 18:30 1870人阅读 评论(0) 收藏  ...

  9. [JZOJ4648] 【NOIP2016提高A组模拟7.17】锦标赛

    题目 描述 题目大意 有nnn个人,你要确定一个出场序列.每次新上台的人就会和擂主打一架,胜利的人继续当擂主.题目给出两两之间打架胜利(失败)的概率. 问111选手坚持到最后的最大概率. 思考历程 看 ...

  10. 「题解」:[BZOJ4358]permu

    问题: permu 时间限制: 30 Sec  内存限制: 512 MB 题面 题目描述 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域 连 ...