STL_vector 简析

vector 声明的几种方式:

vector<Elem> v   ,创建一个空的vector。


vector <Elem> v1(v)   ,复制一个vector。


vector <Elem> v(n)  ,创建一个vector,含有n个数据,数据均已缺省构造产生。


vector <Elem> v(n, elem)   ,创建一个含有n个elem拷贝的vector。


vector <Elem> v(begin,end)   ,创建一个以[begin;end)区间的vector。


v.~ vector <Elem>()  ,销毁所有数据,释放内存。


v.resize(2*v.size, 0) 将v的容量翻倍(并把新元素的值初始化为0)。

四个相关成员函数。在标准容器中,只有vector和string提供了所有这些函数。

(1) size()告诉你容器中有多少元素。它没有告诉你容器为它容纳的元素分配了多少内存。

 
(2) capacity()告诉你容器在它已经分配的内存中可以容纳多少元素。那是容器在那块内存中总共可以容纳多少元素,而不是还可以容纳多少元素。如果你想知道一个vector或string中有多少没有被占用的内存,你必须从capacity()中减去size()。如果size和capacity返回同样的值,容器中就没有剩余空间了,而下一次插入(通过insert或push_back等)会引发上面的重新分配步骤。 


(3) resize(Container::size_type n)强制把容器改为容纳n个元素。调用resize之后,size将会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部。如果n大于当前容量,在元素加入之前会发生重新分配。 


(4) reserve(Container::size_type n)强制容器把它的容量改为至少n,提供的n不小于当前大小。这一般强迫进行一次重新分配,因为容量需要增加。(如果n小于当前容量,vector忽略它,这个调用什么都不做,string可能把它的容量减少为size()和n中大的数,但string的大小没有改变。在我的经验中,使用reserve来从一个string中修整多余容量一般不如使用“交换技巧”,那是条款17的主题。)

对于vector ,容量大小随着数据增多成倍增大原理测试源码。

#include "stdafx.h"
#include "iostream.h"
#include "iomanip.h"
#include "vector"

int main(int argc, char* argv[])
{
using namespace std;
vector<int> v;
//v.reserve(1000);
for (int i = 1; i <= 1000; ++i){ 
	//cout<<v.size()<< " ";
	cout<<v.capacity()<<" ";
	v.push_back(i);
}
for (int j=0;j < v.size();j++){}//{cout<<v[j]<<" ";}
printf("Hello World!\n");
   return 0;
}

c.assign(begin,end)
将[begin; end)区间中的数据赋值给c。
c.assign(n,elem)
将n个elem的拷贝赋值给c。 
c.at(idx)
传回索引idx所指的数据,如果idx越界,抛出out_of_range。 
c.back()
传回最后一个数据,不检查这个数据是否存在。
c.front()
传回地一个数据。 
get_allocator
使用构造函数返回一个拷贝。 
c.rbegin()
传回一个逆向队列的第一个数据。 
c.rend()
传回一个逆向队列的最后一个数据的下一个位置。 
c.~ vector <Elem>()
销毁所有数据,释放内存。  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值