vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组。

vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存。

对于vector容器的容量定义,可以事先定义一个固定大小,然后可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前面插入新元素。

vector容器有两个重要的方法,begin()和end()。begin()返回的是首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器。

创建vector对象


创建vector对象的时候,可以不带参数,带一个参数,带两个参数:

(1)不指定容器的元素的个数(不带参数)
vector<int> v;

(2)指定容器的大小(带一个参数,表示容器的大小)

vector<double> v(10);

(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初值(带两个参数,分别表示容器的大小和每个元素的初值)

vector<int> v(10,0);

尾部元素扩张


通常使用push_back()对vector容器在尾部追加新元素。尾部追加元素,vector容器会自动分配新内存空间。

#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
return 0;
}

上面的代码表示:将1,2,3三个元素从尾部添加到v容器中,现在容器的长度为3,三个元素分别是1,2,3


下表方式访问vector元素


可以像数组一样使用下标访问vector中的元素

#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout<<v[0]<<endl;
v[1] = 10;
cout<<v[1]<<endl;
cout<<v[2]<<endl;
return 0;
}

程序输出:1 10 3


使用迭代器访问vector元素


常使用迭代器配合循环语句对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致。

#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3); vector<int>::iterator it;
for(it=v.begin();it<v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}

元素的插入


insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
要注意的是:inert()方法要求插入的位置是元素的迭代器的位置,而不是元素的下标。
insert(iterator,value)函数有两个参数,第一个是迭代器的位置,第二个是插入的数据的值。

#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3); vector<int>::iterator it=v.begin();
v.insert(v.begin(),8);
v.insert(v.begin()+2,9);
v.insert(v.end(),10); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}

输出结果是:8 1 9 2 3 10


向量的大小和元素的删除


erase()方法可以删除vector中迭代器所致的一个元素或者一段区间中的所有元素,如果带有一个参数,则删除对应迭代器位置的元素,如果对应的是两个参数,则删除的是第一个迭代器到第二个迭代器之间(包括第一个迭代器位置,不包括第二个迭代器位置)的元素,删除元素之后,后面的元素会提到前面去,将其覆盖。

clear()方法则一次性删除了vector中的所有的元素。

size()方法可以返回向量的大小,即元素的个数。

empty()方法可以返回向量是否为空(空则返回真,非空返回假)

#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
for(int i=0;i<10;i++)
{
v.push_back(i);
}
cout<<"size:"<<v.size()<<endl; vector<int>::iterator it=v.begin();
v.erase(it+1); //删除v[1]
v.erase(it+4,it+7); //删除v[4]~v[5](!!注意此时的数组已经动态调整了)
for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
}
cout<<"\nempty:"<<v.empty()<<endl; v.clear(); cout<<"empty:"<<v.empty()<<endl;
return 0;
}

程序输出:

size:10

0 2 3 4 8 9

empty:0

empty:1

使用reverse反向排列算法

reverse反向排列算法,需要引入头文件algorithm。

#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
for(int i=0;i<10;i++)
{
v.push_back(i);
} vector<int>::iterator it=v.begin(); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl; reverse(v.begin(),v.end()); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
}
return 0;
}

输出结果:

0 1 2 3 4 5 6 7 8 9

9 8 7 6 5 4 3 2 1 0

使用sort算法对向量元素排序


使用sort算法对向量排序,也需要引入头文件algorithm。
sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列(当然可以认为进行改变)。

#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
bool Comp(const double &a,const double &b)
{
return a>b;
}
int main()
{
vector<double> v;
for(double i=2.0;i>1;i=i-0.1)
{
v.push_back(i);
}
sort(v.begin(),v.end()); vector<double>::iterator it=v.begin(); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
} cout<<endl;
sort(v.begin(),v.end(),Comp); for(it=v.begin();it<v.end();it++)
{
cout<<*it<<" ";
} return 0;
}

输出结果:
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2

2 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1


vector向量容器的更多相关文章

  1. 学习笔记之vector向量容器

    今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...

  2. vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...

  3. 标准模板库使用参考——vector向量容器

    C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...

  4. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int> ...

  5. C++STL之vector向量容器

    vector向量容器   vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...

  6. 利用copy函数简单快速输出/保存vector向量容器中的数据

    如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...

  7. vector 向量容器用法祥解

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

  8. C++ STL vector(向量容器)的使用(附完整程序代码)

    一.简单介绍 Vectors 包括着一系列连续存储的元素,其行为和数组类似. 訪问Vector中的随意元素或从末尾加入元素都能够在O(1)内完毕,而查找特定值的元素所处的位置或是在Vector中插入元 ...

  9. vector向量容器的一些基本操作

    #include <vector> #include <iostream> using namespace std; void print(vector<int>& ...

随机推荐

  1. 【面试季之三】IE6兼容问题

    最近面试真的碰到很多基础的问题,平时在工作的时候往往可以直观的看到页面的问题,然后进行代码调试,调试不明白了还可以上网查一下.可是面试的时候,就是得当场反应出来,并且还得能系统的说出1.2.3.4.5 ...

  2. 【ci框架学习】环境搭建

    系统 -- Ubuntu 14.0(虚拟机linux 实体机Windows) 目标环境 -- lnmp 附加内容: 1.目录共享(方便代码编写) 2.使用secure crt终端软件连接(便于操作,不 ...

  3. CF632E: Thief in a Shop(快速幂+NTT)(存疑)

    A thief made his way to a shop. As usual he has his lucky knapsack with him. The knapsack can contai ...

  4. 接口测试基础——第4篇logging模块

    Logging:日志记录是为了跟踪记录软件运行时,发生的事件,包括出错,提示信息等等. log日志级别:日志级别大小关系为:CRITICAL > ERROR > WARNING > ...

  5. 批量插入数据利器之SqlBulkCopy

    工作中要频繁的处理一些数据导入,又不想手工去做,因此用了神器SqlBulkCopy.在MSDN查看了此类的帮助文档几经波折终于搞定,记录下来方便以后查阅. MSDN实例: using System.D ...

  6. LG3380 3380 【模板】二逼平衡树(树套树)

    题意 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在区间内的前驱(前驱定义为严格小于x ...

  7. linux用netstat查看服务及监听端口

    [root@localhost ~]# netstat -nlp netstat命令各个参数说明如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l : 仅显示监听套接字(所谓套接 ...

  8. 浪潮各机型管理芯片BMC IP(智能平台管理接口)设置

    NF5240m3/NF5140m3/NF5280m3/SA5212H2/NP5540M3NF5270M3/NF5170M3/NF8420m3 IPMI主板集成管理芯片BMC IP 设置开机按DEL键进 ...

  9. bzoj 4671 异或图——容斥+斯特林反演+线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4671 考虑计算不是连通图的方案,乘上容斥系数来进行容斥. 可以枚举子集划分(复杂度是O(Be ...

  10. 转JMeter 利用Jmeter批量数据库插入数据

    1.   启动Jmeter 2.   添加 DBC Connection Configuration 右键线程组->添加->配置元件->JDBC Connection Configu ...