[总结]C++ 之 向量vector 一.声明,初始化 二.访问 三.二维向量 四.内存管理使用


目录

常用函数:

一.声明,初始化

二.访问

1.和数组相似

 2.使用迭代器

注意:

★补充:

补充:

三.二维向量

四.内存管理使用


常用函数:

front():返回当前vector容器中 起始元素的引用。
back():返回当前vector容器中末尾元素的引用。
begin():返回一个当前vector容器中起始元素的迭代器。
end():返回一个当前vector容器中末尾元素的迭代器。

empy():  判断向量是否为空,若是返回1,否则返回

size():  获取向量中的元素个数

clear() //清空向量中的元素

insert : 插入

①、 a.insert(a.begin(), 1000); //将1000插入到向量a的起始位置前

②、 a.insert(a.begin(), 3, 1000) ; //将三个1000插到向量起始位置前

③、 vector<int> a(5, 1) ;

    vector<int> b(10) ;

    b.insert(b.begin(), a.begin(), a.end()) ; 
    //将a.begin()~ a.end()之间的全部元素插入到b.begin()前
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用
b.swap(a): a向量与b向量进行交换  想清空vector一定要定义一个空的vector通过swap去释放空间,而不是简单的clear,clear仅仅是清空数据并不会释放vector空间。
//本质是交换了指向的首尾指针和容量指针
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用
  void swap(vector<_Tp, _Alloc>& __x) {
    __STD::swap(_M_start, __x._M_start);
    __STD::swap(_M_finish, __x._M_finish);
    __STD::swap(_M_end_of_storage, __x._M_end_of_storage);
  }
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

参考:vector 释放内存 swap

数组是静态分配空间,分配后不可改变

vector是动态分配内存,随着元素的不断插入,按照自身的一套机制不断扩充自身的容量, vector容器的容量增长是按照容器现在容量的一倍进行增长。 先复制2倍的vector空间,再删除原来1倍的vector空间。空间复杂度增大

	1.vector<int> a ;                                //声明一个int型向量a
    2.vector<int> a(5) ;                            //声明一个初始大小为5的向量
    3.vector<int> a(10, 1) ;                         //声明一个初始大小为10且初始值都为1的向量
    4.vector<int> b(a) ;                             //声明并用向量a初始化向量b
    5.vector<int> b(a.begin(), a.begin()+5) ;        //将a向量中从第0个到第4个(共5个)作为向量b的初始值
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

也可使用数组初始化向量

  int a[] = {1, 2, 3, 4, 5} ;
  6.vector<int> v(n, n+5) ;              //将数组n的前5个元素作为向量a的初值
  7.vector<int> v(&n[0], &n[4]) ;        //将n[0] - n[4]范围内(不包含n[4])的元素作为向量a的初值
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

<7>示例:

    int a[]={1,2,3,9,5,6,7,8};
    vector<int> v1(&a[0],&a[3]);
    for(auto t:v1){
        cout<<t<<" ";
    }
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

二.访问

1.和数组相似

    vector<int> a(10, 0) ;      //大小为10初值为0的向量a

    //部分元素进行输入,输出
    cin >> a[2] ;
    cin >> a[5] ;
    cout << a[2]

    //全部输出
    int i ;
    for(i=0; i<a.size(); i++)
        cout<<a[i]<<" " ;
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

 2.使用迭代器

可以使用遍历器(又称迭代器)进行输出控制,
(a.begin(), a.end())分别表示起始元素和最后一个元素之外的元素位置。
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

注意:

end()返回的却是末尾元素再下一个元素的迭代器(取最后一个元素的话用last()),好处是

1.判断是否到尾部简单只要!=end就行了,"<"运算在STL中是要避免的,因为计算量可能会比较大。 

2.判断空区间较为简单begin()==end()。

    //全部输出
    vector<int>::iterator t ;
    for(t = a.begin(); t != a.end(); t++)
        cout << *t << " " ;//访问指针,对实例a的修改可能会使迭代失效
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

endl; } [总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

补充:

auto推导的类型如同

template <class T>

void f(const T&); 中T的类型一样

三.二维向量

 创建的是一个"元素为向量"的向量。同样可以根据一维向量的相关特性对二维向量进行操作。

    //10行,5列,全部初始化为1
    vector< vector<int> > b(10, vector<int>(5, 1)) ;

    //部分输入输出
    //cin>>b[1][1] ;
    //cin>>b[2][3] ;
    //cout<<b[1][1]

    //全部输出
    int m, n ;
    for(int m=0; m<b.size(); m++)           //b.size()获取行向量的大小
    {
        for(int n=0; n<b[m].size(); n++)    //获取向量中具体每个向量的大小
        {
            cout<<b[m][n]<<" " <<endl;
        }
        cout<<endl;
    }
[总结]C++ 之 向量vector
一.声明,初始化
二.访问
三.二维向量
四.内存管理使用

四.内存管理使用

参考:C++ vector内存管理使用解析-你真的学会vector了吗?