vector向量容器不但像数组一样对元素进行随机访问,还能在尾部插入元素,是一个简单、高效的容器, 完全可以替代数组。vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占用的内存空间。

使用vector向量容器,需要头文件包含声明“#include”vector容器的下标是从0开始计数的,也就是说,如果vector容器的大小是n,那么,元素的下标是0~n-1。对于vector容器的容量定义,可以事先定义一个固定大小,事后,可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前插入新元素。

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

一、创建vector对象

vector<type> vec1;                       // v1保存类型为type的对象,默认构造函数,v1为空
vector<type> vec2(size); // v2含有值初始化的元素的size个副本
vector<type> vec3(size,value); // v3包含值为value的size个元素
vector<type> vec4(myvector); // v4是myvector的一个副本
vector<type> vec5(first,last); // 用迭代器first和last之间的元素创建v5

二、常用操作

这里我们以vector<int> c;为例进行说明。

1、容器的大小操作

c.max_size():返回向量类型的最大容量(2^30-1=0x3FFFFFFF)
c.capacity():返回向量当前开辟的空间大小(<= max_size,与向量的动态内存分配策略相关)。
c.size():返回向量中现有元素的个数(<=capacity)。
c.resize(n):调整向量的长度使其能容纳n个元素。
c.resize(n,x):把向量的大小改为n,所有新元素的初值赋为x。
c.empty():如果向量为空,返回真。

2、元素的赋值操作

c.assign(first,last):将迭代器first,last所指定范围内的元素复制到c 中。
c.assign(num,val):用val的num份副本重新设置c。

3、元素的访问操作

c.at(n):等价于下标运算符[],返回向量中位置n的元素,因其有越界检查,故比[ ]索引访问安全。
c.front():返回向量中第一个元素的引用。
c.back():返回向量中最后一个元素的引用。
c.begin():返回向量中第一个元素的迭代器。
c.end():返回向量中最后一个元素的下一个位置的迭代器,仅作结束游标,不可解引用。
c.rbegin():返回一个反向迭代器,该迭代器指向容器的最后一个元素。
c.rend():返回一个反向迭代器,该迭代器指向容器第一个元素前面的位置。

4、元素的删除操作

c.pop_back():删除向量最后一个元素。
c.clear():删除向量中所有元素。
c.erase(iter):删除迭代器iter所指向的元素,返回一个迭代器指向被删除元素后面的元素。
c.erase(start, end):删除迭代器start、end所指定范围内的元素,返回一个迭代器指向被删除元素段后面的元素。

5、元素的插入操作

c.push_back(x):把x插入到向量的尾部。
c.insert(iter, x):在迭代器iter指向的元素之前插入值为x的新元素,返回指向新插入元素的迭代器。
c.insert(iter,n,x):在迭代器iter指向的元素之前插入n个值为x的新元素,返回void。
c.insert(iter,start,end):把迭代器start和end所指定的范围内的所有元素插入到迭代器iter所指向的元素之前,返回void。

6、元素的交换操作

c.reverse():反转元素顺序。
c.swap(c2):交换2个向量的内容,c和c2 的类型必须相同。

三、代码示例

1、增加元素到尾部

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v;
v.push_back(3);
v.push_back(6);
v.push_back(9);
return 0;
}

2、下标访问

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v(3);
v[0] = 3;
v[1] = 6;
v[2] = 9;
cout << v[0] << " " << v[1] << " " << v[2] << endl;
return 0;
}

3、迭代器访问

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v(3);
v[0] = 3;
v[1] = 6;
v[2] = 9;
//定义迭代器变量
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
//输出迭代器上的元素值
cout << *it << " ";
}
cout << endl;
return 0;
}

4、增加元素

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v(3);
v[0] = 3;
v[1] = 6;
v[2] = 9; //在最前面插入新元素,元素值为1
v.insert(v.begin(), 1); //在第2个元素后插入新元素2
v.insert(v.begin()+2, 2); //在向量的末尾追加新元素0
v.insert(v.end(), 0);
//定义迭代器变量
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
//输出迭代器上的元素值
cout << *it << " ";
}
//换行
cout << endl;
return 0;
}

5、删除元素

#include <vector>
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int> v(10);
//给向量赋值
for (int i = 0; i < 10; i++) {
v[i] = i;
}
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++) {
//输出迭代器上的元素值
cout << *it << " ";
}
//换行
cout << endl; //删除第3个元素,即v[2]
v.erase(v.begin()+2);
for (it = v.begin(); it != v.end(); it++) {
//输出迭代器上的元素值
cout << *it << " ";
}
//换行
cout << endl; //删除迭代器第1到第5区间(不包括第5区间)的所以元素
v.erase(v.begin()+1, v.begin()+5);
for (it = v.begin(); it != v.end(); it++) {
//输出迭代器上的元素值
cout << *it << " ";
}
//换行
cout << endl;
//清空向量
v.clear();
//输出向量大小
cout << v.size() << endl; return 0;
}

oj教程--向量容器的更多相关文章

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

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

  2. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  3. STL标准模板库 向量容器(vector)

    向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...

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

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

  5. Spring 系列教程之容器的功能

    Spring 系列教程之容器的功能 经过前面几章的分析,相信大家已经对 Spring 中的容器功能有了简单的了解,在前面的章节中我们一直以 BeanFacotry 接口以及它的默认实现类 XmlBea ...

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

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

  7. vector向量容器

    vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组. vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存. ...

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

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

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

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

随机推荐

  1. java继承成员变量特点

    1 /* 2 * 在子父类中,成员的特点体现. 3 * 1,成员变量. 4 * 2,成员函数. 5 * 3,构造函数. 6 */ 7 8 //1, 成员变量. 9 /* 10 * 当本类的成员和局部变 ...

  2. 开源办公套件DzzOffice安装教程

    DzzOffice开源办公套件 DzzOffice是一套开源办公套件,适用于企业.团队搭建自己的 类似"Google企业应用套件"."微软Office365"的 ...

  3. xargs、管道、exec区别

    作者:ilexwg链接:https://www.zhihu.com/question/27452459/answer/170834758来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  4. ssh 信任关系无密码登陆,清除公钥,批量脚本

    实验机器: 主机a:192.168.2.128 主机b:192.168.2.130 实验目标: 手动建立a到b的信任关系,实现在主机a通过 ssh 192.168.2.130不用输入密码远程登陆b主机 ...

  5. SpringBoot使用异步线程池实现生产环境批量数据推送

    前言 SpringBoot使用异步线程池: 1.编写线程池配置类,自定义一个线程池: 2.定义一个异步服务: 3.使用@Async注解指向定义的线程池: 这里以我工作中使用过的一个案例来做描述,我所在 ...

  6. Idea 中使用Lombok找不到其自动生成的方法

    问题描述 在我的Idea已经安装Lombok插件还有已经导入Lombok jar包依赖的情况下,仍然找不到其自动生成的方法. 问题分析 从各方大佬那里得知,Lombok通过Pluggable Anno ...

  7. Idea 如何不通过模板创建支持Maven的JavaWeb项目

    手动与模板创建的区别,请自行体会. 1. 点击创建项目 2. 不勾选骨架 3.填写项目名称以及该Maven项目坐标(groupid.artifactid.version). 在仓库中,以坐标确定项目. ...

  8. VC 获取多个mac地址

    转载请注明来源:https://www.cnblogs.com/hookjc/ #include <IPHlpApi.h>#include <iostream>#pragma ...

  9. cmd中删除、添加、修改注册表命令

    转自:http://www.jb51.net/article/30586.htm regedit的运行参数 REGEDIT [/L:system] [/R:user] filename1 REGEDI ...

  10. 【ASP.NET Core】设置 Web API 响应数据的格式——FormatFilter特性篇

    在上一篇烂文中老周已向各位介绍过 Produces 特性的使用,本文老周将介绍另一个特性类:FormatFilterAttribute. 这个特性算得上是筛选器的马甲,除了从 Attribute 类派 ...