c++学习——vector

一、vector简介

    vector代表可以改变大小的数组的序列容器。vector就像数组一样,为其中的元素提供连续的存储位置,这意味着vector的元素可以通过其元素常规指针上的偏移量进行访问,这种方式和数组的效率一样高。但是与数组不同的是,vector的大小可以动态改变,它们的存储由容器自动处理。

 

二、vector成员

C++89

C++11

 

三、vector初始化(c++11)

1、不带参数的构造函数初始化

//初始化一个size为0的vector
vector<int> name;

2、带参数的构造函数初始化

//初始化size,每个元素值为默认值
vector<int> name(5);    //初始化5个默认值为0的元素
//初始化size,并设置初始值
vector<int> name(5,1); //初始化5个值为1的元

3、通过数组地址初始化

int array[5] = {0,1,2,3,4};
//通过数组的地址初始化,注意地址是从0到5(左闭右开区间)
vector<int> name(a, a+5);
vector<int> name(a, a+ sizeof(a)/ sizeof(int));

4、通过copy初始化

vector<int> a(5,1);
int a1[5] = {2,2,2,2,2};
vector<int> b(10);

/*将a中元素全部拷贝到b开始的位置中,注意拷贝的区间为a.begin() ~ a.end()的左闭右开的区间*/
copy(a.begin(), a.end(), b.begin());

//拷贝区间也可以是数组地址构成的区间
copy(a1, a1+5, b.begin() + 5);

5、通过同类型的vector初始化

vector<int> a(5,1);
//通过a初始化
vector<int> b(a);

6、通过insert初始化

//insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中
vector<int> a(6,6);
vecot<int> b;
//将a[0]~a[2]插入到b中,b.size()由0变为3
b.insert(b.begin(), a.begin(), a.begin() + 3);

通过数组地址区间实现插入

int a[6] = {6,6,6,6,6,6};
vector<int> b;
//将a的所有元素插入到b中
b.insert(b.begin(), a, a+7);

插入m个值为n的元素

//在b开始位置处插入6个6
b.insert(b.begin(), 6, 6);

 

四、vector传参方式

转自:https://www.cnblogs.com/xiaoxi666/p/6843211.html

(1)三种传参方式

function1(std::vector< int > vec),传值 

function2(std::vector< int >& vec),传引用 

function3(std::vector< int >* vec),传指针  

 注意:三种方式分别有对应的const形式,不在此讨论。

(2)三种方式对应的调用形式分别为:

function1(vec),传入值 

function2(vec),传入引用 

function3(&vec),传入地址 

(3)三种方式的效果分别为:

会发生拷贝构造 

不会发生拷贝构造 

不会发生拷贝构造 

引用和地址区别:https://blog.csdn.net/qq_26501341/article/details/58192662

 

注意

1、使用Vectors时初始化不建议为空,而是预分配一定内存,若所储存数据较少可分配比所需更大内存,若所需储存数据较大,初始化未进行预分配,容易导致内存泄漏,同时Vectors处理大数据时效率较低。

 

参考:

https://blog.csdn.net/duan19920101/article/details/50617190/

https://blog.csdn.net/yjunyu/article/details/77728410

http://www.cplusplus.com/reference/vector/vector/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值