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/

猜你喜欢

转载自blog.csdn.net/Kalenee/article/details/80713177