vector容量器的应用
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容量器的应用的更多相关文章
- Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事
本文投票地址:http://vote.blog.csdn.net/Article/Details?articleid=37834689 前天看到一个颇为纠结的选择题:有一天你遇到一个外星人,这时外星人 ...
- 算法设计与分析(李春保)练习题答案v2
----------------------------------------------------- Page 1 --------------------------------------- ...
- world.construct(me);
目录 0 引言 0.1 所谓构造题 0.2 重点是动机 (motivation) 1 实践出真知 1.1 「CSP-S 2021」「洛谷 P7915」回文 1.1.1 题目大意 1.1.2 解题过程 ...
- Solution -「OurOJ 46544」漏斗计算
\(\mathcal{Description}\) Link. 定义一个运算结点 \(u\) 有两个属性:当前容量 \(x_u\).最大容量 \(V_u\).提供以下单元操作: I 读入一个整 ...
- C++ 序列式容器之vector
什么是容器 容器,顾名思义,是用来容放东西的场所.C++容器容放某种数据结构,以利于对数据的搜寻或排序或其他特殊目的.众所周知,常用的数据结构不外乎:数组array, 链表list, 树tree ...
- [知识点]C++中STL容器之vector
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...
- C++容器之Vector
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vect ...
- C++STL模板库序列容器之vector
目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
随机推荐
- (2)python tkinter-按钮.标签.文本框、输入框
按钮 无功能按钮 Button的text属性显示按钮上的文本 tkinter.Button(form, text='hello button').pack() 无论怎么变幻窗体大小,永远都在窗体的最上 ...
- Spring的refresh()方法相关异常
如果是经常使用Spring,特别有自己新建ApplicationContext对象的经历的人,肯定见过这么几条异常消息:1.LifecycleProcessor not initialized - c ...
- JavaScript开发人员必知的10个关键习惯
还在一味没有目的的编写JavaScript代码吗?那么你就OUT了!让我们一起来看看小编为大家搜罗的JavaScript开发人员应该具备的十大关键习惯吧! 随着新技术的不断发展,JavaScript已 ...
- javaweb中静态文件的处理方法
方案一:激活Tomcat的defaultServlet来处理静态文件 在web.xml中添加: <servlet-mapping> <servlet-name>default& ...
- arp协议简单介绍
1. 什么是ARP? ARP (Address Resolution Protocol) 是个地址解析协议.最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供 ...
- 关系型数据库——MySQL
[MySQL架构图] MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务. 连接器:用于连接管理,进行身份认证及权限相关的管理.(登录MySQ ...
- Android开发 使用SparseArray代替HashMap[转载]
源作者:Android小Y链接:https://www.jianshu.com/p/1828f14d7955来源:简书 前言 Android开发中,一个好的应用,除了要有吸引人的功能和交互之外,在性能 ...
- css---4表单相关伪类
input:enabled{ color:red;} input:disabled{ color:blue;} enabled or disable 表单的状态 input:checked{ widt ...
- layui实现批量导入excal表
layui实现多文件上传,并直接选中需要上传文件的类型 //拖拽上传 upload.render({ elem : '#import', size: , //限制文件大小,单位 KB accept: ...
- jmeter参数化遇到的问题
遇到的问题是点击运行后,察看结果树没有任何结果,且右上角的警告日志是: meter.threads.JMeterThread: Test failed! java.lang.IllegalArgume ...