STL的vector

STLvector

vector是表示可变大小的序列容器,可以动态增长,采用连续的存储空间来存储元素,可以直接用下标进行访问,相对于其他的动态序列容器来说,vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效,不在末尾删除和插入则效率低

 

与数组相比:

优点:

使用时无需申明上限,vector的长度会自动增加

Vector在增加删除元素上比数组高效

缺点:

时间:运行速度比数组慢

空间:clear()无法清空内存


vector的使用

1:增加元素

push_back

insert

 //intvector,包含3个元素

    vector<int> v(3);

    //intvector,包含3个元素且每个元素都是9

    vector<int> v2(3,9);

    v[0]=2; //v[0]是第0个元素

    v[1]=7;

    v.insert(v.begin(),8);//在最前面插入新元素。

    v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素

    v.insert(v.end(),3);//在向量末尾追加新元素。

    v.insert(v.end(),4,1);//在尾部插入41

//插入1 2

    v.push_back(1);

    v.push_back(2);

 

 

 

2:输出数据(三种)

 for(int i=0;i<nSize;i++)  

    {  

        cout<<vecIntA[i]<<" ";  

    }

 for(int i=0;i<nSize;i++)  

    {  

        cout<<vecIntA.at(i)<<" ";  

    }

for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)  

    {  

        cout<<*it<<" ";  

    }  

 

3:删除元素

 pop_back();末尾删除元素

 erase();任意位置删除元素

    v.pop_back();

    

    v.erase( v.begin());//删除v1中的第一个元素

    v.erase(v.begin()+2);//删除第3个元素

    v.erase(vec.begin()+i,v.begin()+j);//删除区间[i,j-1];区间从0开始

    

 

4:清空和判断空

clear() empty()

 

5:数据访问

下标访问: vec[1]; //并不会检查是否越界

at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界,是则抛出out of range异常

访问第一个元素: vec.front();

访问最后一个元素: vec.back();

返回一个指针: int* p = vec.data();

 

6:反转

reverse(vec.begin(), vec.end());////头文件#include<algorithm>

 

7:交换

交换两个向量的元素: swap(v2);///与另外一个vector交换数据

 

8:修改元素

修改元素的方法主要有三种:1.通过数组修改,2.通过引用修改,3.通过迭代器修改

 //通过数组修改vector  

   vecIntA[1]=8;  

 //通过引用修改vector  

    cout<<"通过引用修改,第二个元素为18"<<endl;  

    int &m = vecIntA.at(1);  

    m=18;  

 //通过迭代器修改vector  

    vector<int>::iterator itr = vecIntA.begin()+1;  

    *itr = 28;  

 

 

9::排序

sort(vec.begin(), vec.end());////头文件#include<algorithm

sort(vec.begin(), vec.end()); //采用的是从小到大的排序

//如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:

bool Comp(const int& a, const int& b) {

    return a > b;

}

sort(vec.begin(), vec.end(), Comp);

 

猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/80235911