一、简单介绍

Vectors 包括着一系列连续存储的元素,其行为和数组类似。

訪问Vector中的随意元素或从末尾加入元素都能够在O(1)内完毕,而查找特定值的元素所处的位置或是在Vector中插入元素则是O(N)。

Constructors 构造函数
Operators 对vector进行赋值或比較
assign() 对Vector中的元素赋值
at() 返回指定位置的元素
back() 返回最末一个元素
begin() 返回第一个元素的迭代器
capacity() 返回vector所能容纳的元素数量(在不又一次分配内存的情况下)
clear() 清空全部元素
empty() 推断Vector是否为空(返回true时为空)
end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
erase() 删除指定元素
front() 返回第一个元素
get_allocator() 返回vector的内存分配器
insert() 插入元素到Vector中
max_size() 返回Vector所能容纳元素的最大数量(上限)
pop_back() 移除最后一个元素
push_back() 在Vector最后加入一个元素
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
reserve() 设置Vector最小的元素容纳数量
resize() 改变Vector元素数量的大小
size() 返回Vector元素数量的大小
swap() 交换两个Vector

二、完整程序代码

/*请务必执行下面程序后对比阅读*/

#include <vector>
#include <iostream>
#include <algorithm>
#include <stdexcept>
using namespace std; void print(int num)
{
cout << num << " ";
} int main()
{
//1. 初始化
vector<int> v;
vector<int>::iterator iv; v.reserve(100);//设置vector最小的元素容纳数量
v.assign(10, 2);//将10个值为2的元素赋到vector中
cout << v.capacity() << endl; //返回vector所能容纳的元素数量(在不又一次分配内存的情况下)
cout << v.size() << endl; //返回Vector实际含有的元素数量
cout << endl; //2. 加入
//注意:push_front()仅仅适用于list和deque容器类型
for (int i = 0; i < 10; i++)
v.push_back(i);
for_each(v.begin(), v.end(), print);//须要#include <algorithm>
cout << endl;
cout << v.size() << endl;
cout << endl; //3. 插入及遍历、逆遍历
v.insert(v.begin() + 3, 99);
v.insert(v.end() - 3, 99);
for_each(v.begin(), v.end(), print);
cout << endl;
for_each(v.rbegin(), v.rend(), print);//在逆序迭代器上做++运算将指向容器中的前一个元素
cout << endl; //一般遍历写法
for(iv = v.begin(); iv != v.end(); ++iv)
cout << *iv << " ";
cout << endl;
cout << endl; //4. 删除
v.erase(v.begin() + 3);
for_each(v.begin(), v.end(), print);
cout << endl;
v.insert(v.begin() + 3, 99);//还原 v.erase(v.begin(), v.begin() + 3); //注意删除了3个元素而不是4个
for_each(v.begin(), v.end(), print);
cout << endl; //注意:pop_front()仅仅适用于list和deque容器类型
v.pop_back();
for_each(v.begin(), v.end(), print);
cout << endl;
cout << endl; //5. 查询
cout << v.front() << endl;
cout << v.back() << endl; //危急的做法,但一般我们就像訪问数组那样操作即可
for (int i = 15; i < 25; i++)
cout << "Element " << i << " is " << v[i] << endl;
//安全的做法
int i;
try
{
for (i = 15; i < 25; i++)
cout << "Element " << i << " is " << v.at(i) << endl;
}
catch (out_of_range err)//#include <stdexcept>
{
cout << "out_of_range at " << i << endl;
}
cout << endl; //6. 清空
v.clear();
cout << v.size() << endl;//0
for_each(v.begin(), v.end(), print); //已经clear。v.begin()==v.end()。不会有不论什么结果。 return 0;
}

三、补充

vector应该说是在STL中使用最广泛的容器。

大家知道。数组是差点儿每一种语言都拥有的底层数据结构,但在我们的工作中,我们会大量的使用数组来表示同一类事物的一个集合。而vector实质上就是一个能够存储不论什么元素的动态数组。

vector尽管不是一个低级的数据结构,可是它各个操作的效率差点儿是和数组同样的。仅仅是它会使用比普通数组很多其它的空间。由于在vector由于空间不足而须要又一次分配空间的时候。它通常会分配很多其它的空间(可能是当前size的1.5倍,这个是由详细实现定义的),以免每次插入一个新的元素的时候,都会又一次分配空间。

又一次分配空间是vector里面最没有效率的操作,所以在使用vector的时候要尽量避免又一次分配空间。详细的方法是依据自己的实际须要来设定vector的capacity大小。

关于vector与list的具体比較。请參考这篇文章

參考站点:http://www.cplusplus.com/reference/vector/vector/

C++ STL vector(向量容器)的使用(附完整程序代码)的更多相关文章

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

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

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

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

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

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

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

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

  5. vector向量容器

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

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

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

  7. vector 向量容器用法祥解

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

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

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

  9. STL --> vector向量

    vector向量 vector是一种对象实体,能够容纳许多其他类型相同的元素,因为又被称为容器. 头文件 在使用它时,需要包含头文件 <vector>. #include <vect ...

随机推荐

  1. WIN10系统 截图或者某些程序时屏幕会自动放大怎么办

    右击这个应用程序,兼容性,以兼容模式运行,同时勾选高DPI设置时禁止显示缩放即可

  2. 基于webview的选择滑动控件(PC和wap版)

    有了webview,大家开发ios或者安卓的app就方便很多啦. 第一可以增量更新: 第二webview可以同时兼容ios和安卓,减少开发量哦. --------------------------- ...

  3. JavaWeb之tomcat安装、配置与使用(一)

    一.Tomcat下载与安装: 1.直接到官网下载Tomcat安装程序包:http://tomcat.apache.org/ 2.下载下来后是个压缩包,如:apache-tomcat-7.0.40.zi ...

  4. SHELL字符串使用总结

    1.获取字符串的长度,${#str} #设置字符串 $ str="liqiu" #打印字符串 $ echo $str liqiu #继续打印字符串 $ echo ${str} li ...

  5. Eclipse经常使用快捷键

    Eclipse经常使用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(中文简体操作系统是Alt+/) 高速修正:Ctrl+1 单词补全:Alt+/ 打开外部Java文档:Shift+F2 ...

  6. Spark GraphX实例(1)

    Spark GraphX是一个分布式的图处理框架.社交网络中,用户与用户之间会存在错综复杂的联系,如微信.QQ.微博的用户之间的好友.关注等关系,构成了一张巨大的图,单机无法处理,只能使用分布式图处理 ...

  7. nano在CentOS上的安装和使用

    安装: yum -y install nano 打开新建:nano 路径+文件名 查看用:cat path/filename如果改文件存在,上面的命令将打开这个文件:如果文件不存在则将会创建一个新文件 ...

  8. Kettle实现数据库迁移

    Kettle实现数据库迁移 需求: 做数据仓库时,需要将业务系统CRM抽取到数据仓库的缓冲层,业务系统使用的是SqlServer数据库,数据仓库的缓冲层使用的是mysql数据库,为实现数据库的迁移,即 ...

  9. Knockout学习之组合监控属性

    组合监控属性 顾名思义,就是我们可以将多个属性合并为一个属性.这样在显示的时候就是整体了,并且其中任何一个属性发生改变,这个属性也都会随之发生改变从而更新视图,而这些只需要使用computed函数就可 ...

  10. Jenkins部署Web项目到远程tomcat(通过jenkins插件)

    之前讲到的是如何构建一个项目,并且将代码进行编译.打包,那么打包完成最后的结果就需要发布到应用服务器,将项目部署成功.在之前的项目中我们采用的shell脚本来部署,下面讲解通过Jenkins部署web ...