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函数可以看到

.png)

.png)
.png)

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数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此 它能非常好的支持随 ...
 
随机推荐
- mysql中的sql时间格式转换
			
from_unixtime(unix_timestamp, format) 把时间戳转化为指定的格式 as: select from_unixtime(addTime, '%Y-%m-%d %h:%i ...
 - HttpContext.Current多线程调用
			
1.在web网站的Global中,进行数据量比较大的初始化工作,而为了使用户在页面上能够及时响应,我们在Global中开启了一个线程执行该函数模块. 不过,在线程中用到HttpContext.Curr ...
 - 51nod1079中国剩余定理
			
/** *中国剩余定理 */ #include<iostream> #include<cstdio> #include<map> #include<cstri ...
 - Oracle表空间传输测试
			
源数据库平台:window 7 64bit Oracle 11g 64bit目标数据库平台:RHEL6 64bit Oracle 11g 64bit 1.查看数据集 select * from nls ...
 - awk的使用备忘
			
[转]http://www.cnblogs.com/mydomain/archive/2012/09/24/2699467.html awk引用外部变量 一.用awk 有以下几种方法去调用变量: ...
 - NSStringUIImage~NSData的相互转换以及中文转码
			
中文转码 str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 图片编码 NSData *data; ...
 - Core管道中的处理流程3
			
通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的? 在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下 ...
 - bug - colorWithPatternImage:
			
// 在ios5之前, 再通过以下方法设置背景时, 有闪屏bug self.view.backgroundColor = [UIColor colorWithPatternImage:<#(no ...
 - css之自动换行
			
自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大, 挺让人头疼,下面介绍的是CSS如何实现换行的方法 对于div,p等块级元素 正常文字的换行(亚洲文字和非亚洲文字)元素 ...
 - What Can I Do With This Major?
			
What Can I Do With This Major? Majors Don’t see your major? Accounting Advertising Africana Studies ...