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. WordPress 3.8 中文正式版下载 - 建站与学习首选!全球最流行的开源PHP博客网站程序

    转载自:http://www.iplaysoft.com/wordpress.html 话说虽然我一直都在网站底部写着本站基于 WordPress 构建,但时常还是有人问我网站是用什么程序建的,还真有 ...

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

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

  3. C#实现拍照并且存水印照片

    由于一直在高校工作,就涉及到招生工作,招生时候又要收集学生图像采集,所以就随手写了一个图像采集工具,废话不多说,进入正题. 图像采集需要调用摄像头就行拍照操作,网上查了一下资料,需要引用以下3个dll ...

  4. day 60 Django基础七之Ajax

      Django基础七之Ajax   本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 六 同源策 ...

  5. java编程规约一

    提高开发效率,比较重视代码规范,尤其是可扩展性和可维护性,以及可读性.如果你是一个刚进公司的开发者,最好先问问前辈是否有 内部的开发规范,花点时间过一遍.即使提交代码没有review的步骤,自己心里应 ...

  6. <a>标签的SEO优化细节

    <a>标签的SEO优化细节 如果需要在新窗口中打开链接,我们使用的方法是在a上加上taget=“_blank”,但很多人不知道这是不符合w3c的规范的,在使用严格的DOCTYPE(xhtm ...

  7. java关键字之instanceof

    首先来看段测试代码 public class TestInstanceof{ public static void main(String[] args){ int a = 1; if(a insta ...

  8. CSS三大特性之继承性

    1.并不是所有的属性都可以继承,只有以color/font/text/line开头的属性 才可以继承. 2.在CSS的继承中,不仅仅是儿子可以继承,只要是后代都可以继承. 3.继承中的特殊性 3.1  ...

  9. 【颓废篇】easyx--2048

    整天待在机房是不是,一直保持学术的态度就比较的难啊~ 所以本蒟蒻就在学术之余学了些奇技淫巧,然后就写了一些奇奇怪怪的程序啊,比如让我们小组dalao们都颓得不亦乐乎的2048~~ 当然,2048的实现 ...

  10. Python全栈开发:DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...