转自:https://blog.csdn.net/fanyun_01/article/details/56842637#commentBox

一、简介

C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是标准库的一部分,使用时需包含头文件:

#include <vector>

注意使用命令空间!!!

 using namespace std; 

二、vector使用总结:

1. vector的初始化:可以有五种方式,举例说明如下:

(1)vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
(2)vector<int>a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vector<int>a(b); //用b向量来创建a向量,整体复制性赋值
(4)vector<int>a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
(5)intb[7]={1,2,3,4,5,9,8};vector<int> a(b,b+7); //从数组中获得初值

2. vector对象的几个重要操作,举例说明如下:

(1)a.assign(b.begin(), b.begin()+3);//b为向量,将b的0~2个元素构成的向量赋给a
(2)a.assign(4,2);//是a只含4个元素,且每个元素为2
(3)a.back();//返回a的最后一个元素
(4)a.front();//返回a的第一个元素
(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-07
(6)a.clear();//清空a中的元素
(7)a.empty();//判断a是否为空,空则返回ture,不空则返回false
(8)a.pop_back();//删除a向量的最后一个元素
(9)a.erase(a.begin()+1,a.begin()+3);//删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)
(10)a.push_back(5);//在a的最后一个向量后插入一个元素,其值为5
(11)a.insert(a.begin()+1,5);//在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
(12)a.insert(a.begin()+1,3,5);//在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
(13)a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
(14)a.size();//返回a中元素的个数;
(15)a.capacity();//返回a在内存中总共可以容纳的元素个数
(16)a.rezize(10);//将a的现有元素个数调至10个,多则删,少则补,其值随机。注意resize和reserve的区别!
(17)a.rezize(10,2);//将a的现有元素个数调至10个,多则删,少则补,其值为2
(18)a.reserve(100);//将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才 显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能) 
(19)a.swap(b);//b为向量,将a中的元素和b中的元素进行整体性交换
(20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<

3. 顺序访问vector的几种方式,举例说明如下:
(1)向向量a中添加元素

vector<int> a;
for(int i=;i<;i++)
a.push_back(i);

(2)也可以从数组中选择元素向向量中添加

int a[]={,,,,,};
vector<int> b;
for(int i=;i<=;i++)
b.push_back(a[i]);

(3)也可以从现有向量中选择元素向向量中添加

int a[]={,,,,,};
vector<int> b;
vector<int> c(a,a+);
vector<int> d(c); // 使用另一个向量c初始化当前向量
for(vector<int>::iterator it=c.begin();it<c.end();it++)
b.push_back(*it);

(4)也可以从文件中读取元素向向量中添加

ifstream in("data.txt");
vector<int> a;
for(int i; in>>i)
a.push_back(i);

(5)两处易犯错误

vector<int> a;
for(int i=;i<;i++)
a[i]=i; //这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素,而现在的a[i]还是空的对象 // 任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是下面的错误在初学者中并不少见
const int size = ;
int ia[ size ] = { , , , , , , };
vector< int > ivec( size );
for ( int ix = ; ix < size; ++ix )
ivec.push_back( ia[ ix ]); // 程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入

4. 从向量中读取元素
(1)通过下标方式读取

int a[]={,,,,,};
vector<int> b(a,a+);
for(int i=;i<=b.size()-;i++)
cout<<b[i]<<" ";

(2)通过遍历器方式读取

int a[]={,,,,,};
vector<int> b(a,a+);
for(vector<int>::iterator it=b.begin();it!=b.end();it++)
cout<<*it<<" ";

三、几种重要的算法,使用时需要包含头文件:
#include<algorithm>
(1)sort(a.begin(),a.end());     //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
(2)reverse(a.begin(),a.end());      //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1);     //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10);     //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置

四、相关算例

(1)类和结构体存vector入实例:由于vector只允许一个占位,所以才将struct塞进vector,以弥补vector的不足

#include "stdafx.h"
#include <vector>
#include <string>
using namespace std;
class AClass
{
public:
int num;
string name;
};
struct AStruct
{
int num;
string name;
};
void TestStruct()
{
//类的使用
AClass Ac;
vector<AClass> vc;
Ac.num=;
Ac.name="name";
vc.push_back(Ac);
AClass d;
for (vector<AClass>::iterator it=vc.begin();it<vc.end();++it)
{
d=*it;
cout<<d.num<<endl;
}
//结构体的使用
AStruct As;
vector<AStruct> vs;
As.num=;
As.name="name";
vs.push_back(As);
AStruct ds;
for (vector<AStruct>::iterator it=vs.begin();it<vs.end();++it)
{
ds=*it;
cout<<ds.num<<endl;
}
}
void TestPoint()
{
//类的使用
AClass *Ac=new AClass;
vector<AClass *> vc;
Ac->num=;
Ac->name="name";
vc.push_back(Ac);
AClass *d;
for (vector<AClass*>::iterator it=vc.begin();it<vc.end();++it)
{
d=*it;
cout<<d->num<<endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
TestStruct();
TestPoint();
int n;
cin>>n;
return ;
}

(2)等待补充

【C++】vector用法详解的更多相关文章

  1. c++ vector用法详解

    1. 定义: 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)可以认为是一个动态数组,其中一个vector中的所有对象都必须是同一种类型的. 2. 构造函 ...

  2. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  3. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  4. 7-set用法详解

    C++中set用法详解 转载 http://blog.csdn.net/yas12345678/article/details/52601454 C++ / set 更详细见:http://www.c ...

  5. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  6. STL string 常见用法详解

    string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...

  7. STL set 常见用法详解

    <算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...

  8. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  9. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

随机推荐

  1. arch Linux(二)

    配置你的基本系统 下列是基于该视频4:40s的流水- 切换到普通用户: [root@eric-laptop ~]# su eric 查看系统信息: [eric@eric-laptop root]$ n ...

  2. mst总结

     1.jsonp跨域 Jsop的原理:利用script不存在跨域的问题,动态创建script标签,把需要请求的数据源地址赋值给其src属性,并且指定一个回调函数,从而接受到我们想要的数据 后台设置下 ...

  3. Sql server数据库连接Oracle库的步骤

    本地使用环境 操作系统: win10 64  ,SQL Server 2012 ,Oracle  Server 11g 第一步:安装好oracle客户端,并配置好TNS信息 ORCL = (DESCR ...

  4. spring注入3种方式

    1.构造方法 2.接口注入 3.set方法

  5. CodeForces - 1015 D.Walking Between Houses

    Description Natasha is planning an expedition to Mars for nn people. One of the important tasks is t ...

  6. js splice函数 数组增加,替换,删除

    splice函数参数介绍: 第一个参数: 对于数数组的操作起始位置. 第二个参数: 从第一个参数开始,删除数组中的个数. 从第三个参数之后所有参数(如果有):执行完第二步之后,都插入到第一个参数的起始 ...

  7. converting the moment tensor to strie-dip-rake

    在多断层求解的试验中,用到了六个基本矩张量: 而显然,尚不能从图中直接读出strke,dip,rake的值,但有关资料给出了这六个基本矩张量的momet tensor: 而找到一个网站可以方便地将mo ...

  8. 使用IDEA搭建Springboot+mybatis

    1.开发工具:Intellij idea2018.2 2.通过Spring Initializr建立项目,Project SDK选择本地的jdk就可以,我的是jdk1.8,之后点击next. 修改项目 ...

  9. Vue编译提示警告

    There are multiple modules with names that only differ in casing.有多个模块同名仅大小写不同This can lead to unexp ...

  10. 剑指Offer 58. 对称的二叉树 (二叉树)

    题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目地址 https://www.nowcoder.com/practice/ ...