c++ vector基本函数、排序、查找用法
vector用法目录:
6、vector实战(这里写的是我在最开始用vector时候犯的错误)
1、基本用法:
头文件:
#include<vector>
定义vector:
整数型: vector<int>a;
字符型: vector<char>a;
字符串型: vector<string>a; (注意字符串型输入输出用cin和cout)
固定vector的大小:
vector<int>a(105);
在容器最后存入新元素:
for(int i=0;i<10;i++){
b.push_back(i);
}
将字符数组中的数据赋值给容器:
1、遍历赋值:
char a[MAX+5];
vector<char>vc;
cin>>a;
int la=strlen(a);
for(int i=0;i<la;i++)
vc.push_back(a[i]);
2、定义容器时赋值:
char a[MAX+5];
cin>>a;
int la=strlen(a);
vector<char>vc(a,a+la);
判断容器的长度:
printf("%d\n",b.size());
遍历容器中元素:
1、遍历输出
for(int i=0;i<vc.size();i++)
printf("%c",vc[i]);
printf("\n");
2、错误示例:
for(int i=vc.begin();i<vc.end();i++){
cout<<vc[i]<<" ";
}
cout<<endl;
清空容器、判断是否为空、删除最后元素:
清空容器: a.clear();//清空a中的元素
判断容器是否空:a.empty();//判断a是否为空,空则返回ture,不空则返回false
删除容器最后的元素: a.pop_back(); ///括号内不可以添加index删除指定元素
2、vector的删除操作
vector很好的一点就是可以实现删除操作,用它来做模拟很好实现。
1、函数使用:
vc.erase(vc.begin(),vc.end()); ///vc.erase()可以删除一个或多个元素
2、说明:
vc.erase()函数中添加的地址范围是左闭右开区间,删除内容后,如果后面还有元素,会自动补全空位。
3、注意:
///vc.erase()函数中不是直接加要删除的内容,下面例子是错误的。
vc.erase('a');
3、vector的sort排序(加#include<algorithm>头文件)
将元素从小到大的顺序排列(默认):
int c1[]={1,3,11,2,66,22,-10};
vector<int>c(c1,c1+7); ///赋初值
sort(c.begin(),c.end());
for(int i=0;i<c.size();i++){
printf("%d ",c[i]);
}
printf("\n");
重写cmp函数按要求排序:
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int x,int y) ///cmp函数传参的类型不是vector<int>型,是vector中元素类型,即int型
{
return x>y;
}
int main()
{
int c1[]={1,3,11,2,66,22,-10};
vector<int> c(c1,c1+7);
sort(c.begin(),c.end(),cmp);
for(int i=0;i<c.size();i++){
printf("%d ",c[i]);
}
printf("\n");
return 0;
}
vector<node>(结构体)的cmp函数与其类似
4、翻转vector中的所有元素:
int d1[]={1,3,11,2,66,22,-10};
vector<int> d(d1,d1+7);
reverse(d.begin(),d.end()); ///不是d.reverse()
for(int i=0;i<d.size();i++){
printf("%d ",d[i]);
}
printf("\n");
5、find()函数的用法:
int temp1[]={ 1,3,2,4,5,0 };
vector<int> temp(temp1,temp1+6);
vector<int>::iterator it=find(temp.begin(),temp.end(),3);///返回的是地址
int index=&*it-&temp[0];///放入迭代器中得到容器中的位置
printf("%d\n",index);
6、vector实战:(这里写的是我在最开始用vector时候犯的错误)
vector没申请不能直接赋值
vector<int>a;
for(int i=0;i<10;i++){
a[i]=5; ///vector[i]根本没被申请,所以不可以直接赋值
}
vector<int>a;
for(int i=0;i<10;i++){
a.push_back(i); ///申请a[3]后,下面可以直接改变它的值
}
a[3]=6;
vector<int>a(10);///先申请一个大小为10的向量后也可以直接改变a[3]的值
a[3]=6;
(上面只是vector的一部分内容,后续会逐渐补充,不足请评论)
c++ vector基本函数、排序、查找用法的更多相关文章
- C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique
std::sort 对vector成员进行排序; std::sort(v.begin(),v.end(),compare); std::lower_bound 在排序的vector中进行 ...
- NX二次开发-C++的vector排序去重用法
#include <algorithm> //vector排序去重 sort( BoxNum.begin(), BoxNum.end()); BoxNum.erase(unique(Box ...
- [转] C++的STL库,vector sort排序时间复杂度 及常见容器比较
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/269 ...
- L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法
vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置.另外再找一个数组来 ...
- 转载:Hadoop排序工具用法小结
本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...
- Sublime文本排序&查找重复行&删除重复行
排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...
- 使用STL库sort函数对vector进行排序
使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象. 代码如下 #include <stdio.h> #include <vector> ...
- STL vector+sort排序和multiset/multimap排序比较
由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...
- 从vector容器中查找一个子串:search()算法
如果要从vector容器中查找是否存在一个子串序列,就像从一个字符串中查找子串那样,次数find()与find_if()算法就不起作用了,需要采用search()算法:例子: #include &qu ...
- Java进阶(三十九)Java集合类的排序,查找,替换操作
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
随机推荐
- jsp循环map map的key值不固定
<c:if test="${not empty parammap}"> <c:forEach items="${parammap }" var ...
- Istio的流量管理(实操二)(istio 系列四)
Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...
- C# 数据操作系列 - 16 SqlSugar 完结篇
0. 前言 前一篇我们详细的介绍了SqlSugar的增删改查,那些已经满足我们在日常工程开发中的使用了.但是还有一点点在开发中并不常用,但是却非常有用的方法.接下来让我们一起来看看还有哪些有意思的内容 ...
- 0515项目优化和List集合
0515项目优化和List集合 1. 项目优化 1.1 分析当前情况 问题 数据存储是数组形式,数据类型明确.复用度较低. 需求 Student操作使用的代码,StudentManager想要操作考虑 ...
- 又抓了一个导致频繁GC的鬼--数组动态扩容
概述 本周有个同事过来咨询一个比较诡异的gc问题,大概现象是,系统一直在做cms gc,但是老生代一直不降下去,但是执行一次jmap -histo:live之后,也就是主动触发一次full gc之后, ...
- 函数:exit()
函数名: exit() 所在头文件:stdlib.h(如果是"VC6.0"的话头文件为:windows.h) 功 能: 关闭所有文件,终止正在执行的进程. exit(1)表示异常退 ...
- 【转】从一副扑克牌中随机抽取N张
该问题为产生不重复的随机数序列,形象点就是一副扑克牌中随机抽取N张. 摘自:不重复随机数列生成算法 改了一部分 /** * 从0-max随机选N个数出来 * **/ public static int ...
- Apache Hudi在医疗大数据中的应用
本篇文章主要介绍Hudi在医疗大数据中的应用,主要分为5个部分进行介绍:1. 建设背景,2. 为什么选择Hudi,3. Hudi数据同步,4. 存储类型选择及查询优化,5. 未来发展与思考. 1. 建 ...
- python winreg总结
注册表 结构 注册表由键(key,或称“项”).子键(subkey,子项)和值项(value)构成.一个键就是树状数据结构中的一个节点,而子键就是这个节点的子节点,子键也是键.一个值项则是一个键的一条 ...
- AVIRIS反射率数据简介
Surface Reflectance 高光谱图像 ↑ AVIRIS高光谱成像光谱仪采集得到的原始图像为辐亮度图像,经过校正后的L1级产品为地表辐亮度信息.但是许多时候,我们更希望知道地面目标物的反射 ...