vector用法目录:

1、基本用法

2、vector的删除操作

3、vector的sort排序

4、翻转vector中的所有元素

5、find()函数的用法

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基本函数、排序、查找用法的更多相关文章

  1. C++算法库学习__std::sort__对 vector进行排序_排序后就可以进行使用std::lower_bound进行二分查找(查找第一个大于等于指定值的迭代器的位置)__std::unique

    std::sort      对vector成员进行排序; std::sort(v.begin(),v.end(),compare);   std::lower_bound 在排序的vector中进行 ...

  2. NX二次开发-C++的vector排序去重用法

    #include <algorithm> //vector排序去重 sort( BoxNum.begin(), BoxNum.end()); BoxNum.erase(unique(Box ...

  3. [转] C++的STL库,vector sort排序时间复杂度 及常见容器比较

    http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/269 ...

  4. L3-002 特殊堆栈 (30分) vector容器的模拟、vector容器的一些用法

    vector容器的简单应用,我们可以用vector维护一个有序数组,每次对要插入的数用upper_bound或者lower_bound来 为这个数找一个应该插入到vector的位置.另外再找一个数组来 ...

  5. 转载:Hadoop排序工具用法小结

    本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...

  6. Sublime文本排序&查找重复行&删除重复行

    排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...

  7. 使用STL库sort函数对vector进行排序

    使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象. 代码如下 #include <stdio.h> #include <vector> ...

  8. STL vector+sort排序和multiset/multimap排序比较

    由 www.169it.com 搜集整理 在C++的STL库中,要实现排序可以通过将所有元素保存到vector中,然后通过sort算法来排序,也可以通过multimap实现在插入元素的时候进行排序.在 ...

  9. 从vector容器中查找一个子串:search()算法

    如果要从vector容器中查找是否存在一个子串序列,就像从一个字符串中查找子串那样,次数find()与find_if()算法就不起作用了,需要采用search()算法:例子: #include &qu ...

  10. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

随机推荐

  1. linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (一)

    这里整理几个在学习Linux DRM/KMS中用到的几个工具,modetest.kmscude.igt-gpu-tools. 简介: modetest 是由libdrm提供的测试程序,可以查询显示设备 ...

  2. OC 面向对象的特性

    面向对象的编程语言有封装.继承 .抽象.多态4个主要的特征. 面向对象编程有三大特性:封装.继承.多态.   1. 封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高 ...

  3. 牛客网挑战赛19 B,C,F

    链接:https://www.nowcoder.com/acm/contest/131/B来源:牛客网 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j. 请寻找一个子矩阵,使得这 ...

  4. poj3683 2-SAT 同上一道

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10151   Accep ...

  5. k3s-安装

    k3s介绍 K3S是一个轻量级的K8S集群,它是Rancher Lab开发的一个新的产品, 目的是在资源有限的设备上面跑K8S.它的最大特点就是小,二进制包只有40MB,只需要512MB的内存就能跑起 ...

  6. Redis学习笔记(1)

    一.NoSQL基础知识 1. NoSQL概念 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库 ...

  7. canvas锥形渐变进度条

    从一个渐变圆角进度条浅出画一个圆 开始 这一切需要从一个(简单)的需求开始,在最开始对设计第一眼看到这张图的时候,感觉挺简单的嘛,直接用echarts饼图模拟出来一个就好了 echarts 然后上ec ...

  8. AES128_CBC模式加密

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  9. 包装类的使用与Junit单元测试类

    包装类: 针对八种基本数据类型定义相应的引用类型,使之有了类的特点,就可以调用类的方法 基本数据类型 包装类 boolean Boolean byte Byte short Short int Int ...

  10. django-模型层(ORM语法)

    今日内容概要(重要) 模型层(ORM语法):跟数据库打交道的 单表查询(增删改查) 常见的十几种查询方法 神奇的双下划线查询 多表操作 外键字段的增删改查 跨表查询(重点) 子查询 联表查询 今日内容 ...