vector整理

std::vector 是一种序列容器,是对大小可变数组的封装。
数组中的元素是连续存储的,所以除了能够通过迭代器访问外,还可以通过常规的指针偏移量访问元素。换句话说,可以将指向 vector 元素的指针传入以指向数组元素的指针作为参数的函数。
vector 会在需要时自动调整所占内存的大小。与对应的静态数组相比,vector 所占的内存通常要更多,因为它还分配了额外的内存以应对将来可能的扩张。于是,vector 就不必在每次插入元素时都重新分配一次内存了,除非这块预留的内存用尽。已分配内存的总大小可以通过 capacity() 函数查询。所占的额外的内存可以通过调用 shrink_to_fit() 返还给系统。
从性能方面考虑,内存重分配操作的代价通常很大。如果事先知道元素个数,可以使用 reserve() 函数消除重新分配操作。
vector 容器扩容实现原理
1.现在原capacity的基础上乘以2得到新开辟的空间
2. 再把原来空间上的数据拷贝到新开辟的空间
3. 收回原来的空间
4. 添加新的
成员函数
capacity()返回当前存储空间能够容纳的元素数
size()返回容纳的元素数
push_back
()将元素添加到容器末尾
shrink_to_fit(C++11)
通过释放未使用的内存减少内存的使用
///
/// @file vector.cc
/// @author lemon(haohb13@gmail.com)
/// @date 2017-06-08 15:59:57
///

include

include

using std::cout;
using std::endl;
using std::vector;

int arr[1024];//静态数组

void printVector(vector & vec)
{
cout << “vec’s size = ” << vec.size() << endl;
cout << “vec’s capacity = ” << vec.capacity() << endl;
}

//vector动态扩容的实现原理:
//1. 先在原来的capacity的基础上乘以2,得到新开辟的空间
//2. 再把原来空间上的数据全部拷贝到新开辟的空间上
//3. 回收原来的空间
//4. 添加新的元素
//
//vector的动态扩容是有效率损失的,不建议频繁地触发扩容操作

int main(void)
{
vector vecInt;//动态数组
vecInt.reserve(100);
printVector(vecInt);

vecInt.push_back(1);
printVector(vecInt);

vecInt.push_back(2);
printVector(vecInt);

vecInt.push_back(3);
printVector(vecInt);

vecInt.push_back(4);
printVector(vecInt);

vecInt.push_back(5);
printVector(vecInt);

vecInt.push_back(6);
printVector(vecInt);

vecInt.push_back(4);
printVector(vecInt);

vecInt.push_back(5);
printVector(vecInt);

vecInt.push_back(6);
printVector(vecInt);


//第一种方式
for(size_t idx = 0; idx != vecInt.size(); ++idx)
{
    cout << vecInt[idx] << " ";
}
cout << endl;


//第二种方式:
vector<int>::iterator it = vecInt.begin();
for(; it != vecInt.end(); ++it)
{
    cout << *it << " ";
}
cout << endl;


//第三种方式:  C++11
for(auto & elem : vecInt)
{
    cout << elem << " ";
}
cout << endl;

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值