一、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/