STL总结之vector
STL中vector是通常作为数组使用,不过它更像一个动态数组,在实际项目开发中大量使用.
优点:存储空间连续,可以使用下标访问,时间复杂度O(1).
缺点:不适合从中间删除和添加元素.
C++标准规定的vector模板声明:
template < class T, class Allocator = allocator<T> > class vector;
Allocator : 存储空间分配器(默认为std::allocator<T>)
1)首先vector可以作为数组使用,因此我们可以在初始化vector时,指定元素个数和初始值.
vector<int> v; //v中含有0个元素
vector<int> v(5); //v中含有5个元素
vector<int> v(5, 1); //v中含有5个元素,赋予初始值1
另外vector还可以通过其他方式构造:
vector<int> third (v.begin(),v.end()); //通过v构造third
vector<int> fourth (third); //通过copy构造
//通过数组进行初始化
int myints[] = {16,2,77,29};
vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) );
这里暂且介绍这几种,更多构造方式查看C++手册.
2)其次我们要介绍下vector对内存的管理.
vector成员函数: size_type size() const;返回当前容器中元素个数
size_type capacity() const;返回当前容量大小(并不一定等于size())
vector为了减少内存频繁申请和释放capacity()返回的是当前容器实际申请内存空间所能容纳的元素个数,当我们在容器添加元素个数大于capacity()的大小时,容器将通过内存分配器重新分配空间(注: 一旦size()中的元素被移除掉, 被移除的对象对应的析构函数将会被调用.).
下面我们通过例子具体看看:
程序1:
vector<int> v;
for (size_t i = 0; i < 100; ++ i)
v.push_back(i);
cout << v.size() << endl;
cout << v.capacity() << endl;
输出:
100
141
可以看到size() 和 capacity()大小不一致.在vs中我们追踪push_back函数可以看到
141
STL总结之vector的更多相关文章
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
- C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法
每次忘记都去查,真难啊 /* C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法 */ /* vector常用用法 */ //头文件 #i ...
- [转] C++的STL库,vector sort排序时间复杂度 及常见容器比较
http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/269 ...
- Linux环境下stl库使用(vector)
step1: #include <iostream> #include <vector> #include <string> using namespace std ...
- stl 中List vector deque区别
stl提供了三个最基本的容器:vector,list,deque. vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随 ...
随机推荐
- centos 安装qrcode 二维码
先安装yum install mingw64-pkg-config.x86_64 yum install cairo-devel 然后报错,好像是gcc版本有点低,现在的版本是4.4.7 那么接下来 ...
- JavaScript 作用域和作用域链
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...
- Apache的多路处理模块MPM:Prefork Worker Event
如何确认当前apache使用哪种模式 通过/etc/init.d/httpd中的来确认系统apache的运行脚本路径 apachectl=/usr/sbin/apachectl httpd=${HTT ...
- DOM五大对象
1.Window 对象:Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个 ...
- gentoo装X服务器时显卡选择
前面装X服务器一直装不成功,每个步骤都按hand book上的进行,编译完成后,重启就是启动不了X服务器,最终才知道由于我是用的是 开源显卡nvidia,换成集成显卡inter后X启动成功,顺便说句, ...
- jquery 循环显示div的示例代码
我们用一个语句就让下面五个div显示成功,具体实现如下,感兴趣的朋友可以参考下 直接看例子 复制代码代码如下: for(var p=1; p<=5; p++){ $("#proper ...
- SQL技术内幕二DDL
创建数据库: if db_id('DBTest') is nullcreate database DBTest 创建表 use eb_fy_data_test---use 切换所在数据库上下文 if ...
- 项目中常用功能,如:流媒体、健康数据(步数等)等-b
整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多 ...
- java web第一个Servlet程序
Servlet 简介 . Java Servlet是和平台无关的服务器端组件,它运行在Serlet容器中.Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和 ...
- NPOI常用功能工具类
public class NPOIHelper { /// <summary> /// DataTable导出到Excel文件 /// </summary> /// <p ...