vector基础笔记

vector对象复制部分对象。

vector<int> arr1{1, 2, 3, 4, 5, 6};
1. vector<int> arr2(arr1.begin(), arr1.begin()+4);
2. vector<int> arr2;
copy(arr1.begin(), arr1.begin()+4, arr2.begin());
PS:注意点复制的区间都是[),左闭右开。所以上述都只复制到 {1,2,3,4}
vector的构造函数的参数都是迭代器,如果是原始数组指针也可以。
copy的参数默认都是迭代器。

#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
    vector<int> arr2;
    int arr3[3] = {1,2,3};
    //arr2.resize(3);
    std::copy(arr3, arr3+2,arr2.begin());
    for(auto x : arr2)
        cout << x << ' ';
    cout<< endl;
    return 0;
}

这是特殊的例子arr2没有预分配大小,运行直接报段错误。
g++ (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0 g++版本
在运行copy前先分配了内存即可。

resize()和reserve()

这里用的是resize()重新分配容器大小,并初始化对象。
其实也可以在构造函数传入vector的长度,并初始化对象。
在这里用reserve()函数尝试过,没有效果,reserve函数的作用是预分配n个int对象的内存。
reserve并不会初始化对象。所以在仅仅调用了reserve函数的vector对象调用copy将数据复制到
vector内存中,会导致复制失败。

reserve在vector不断递增的过程中的确可以减少反复申请扩大内存的数据移动等其他消耗的代价。

释放vector占用的内存

clear,erase函数都是销毁对象,但是并不释放vector占用的内存。
c++11提供了一个释放vector占用内存的函数shrink_to_fit()
也可用swap交换。
1. vector(arr2).swap(arr2);//效果和shrink_to_fit()函数一样
2. vector().swap(arr2);//将内存和数据全部释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值