C++ | vector的初始化和使用

STL | vector的初始化和使用

vector指向量,可以理解为“变长数组”,长度根据需要而自动改变的数组。有时会碰到普通数组会超过内存的情况,可以使用vector解决。而且,vector可以用来以邻接表的方式存储图,可以解决当节点数太多,无法使用邻接矩阵,又害怕使用指针实现邻接表的时候,使用很简单。


01 vector的初始化

1⃣️ 默认初始化
vector<int> ilist1;

vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。
这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。

2⃣️ 通过同类型的vector进行初始化
vector<int> ilist2(ilist); 
vector<int> ilist2  = ilist; 

这两种方式等价 ,ilist2 初始化为ilist的拷贝,ilist必须与ilist2 类型相同,也就是同为intvector类型,ilist2将具有和ilist相同的容量和元素。

3⃣️ 通过迭代器进行初始化
vector<int> ilist3(ilist.begin()+2,ilist.end()-1);

ilist3初始化为两个迭代器指定范围中元素的拷贝,范围中的元素类型必须与ilist3 的元素类型相容,在本例中ilist3被初始化为{3,4,5,6}。
这种初始化方法特别适合于获取一个序列的子序列。

4⃣️ 带参数的构造函数初始化
vector<int> ilist4(7);

默认值初始化,ilist4中将包含7个元素,每个元素进行缺省的值初始化,对于int,也就是被赋值为0,因此ilist4被初始化为包含7个0。
当程序运行初期元素大致数量可预知,而元素的值需要动态获取的时候,可采用这种初始化方式。

5⃣️ 带参数的构造函数初始化
vector<int> ilist5(7,3);

指定值初始化,ilist5被初始化为包含7个值为3的int

6⃣️ 通过数组地址初始化
int a[5]={1,2,3,4,5}
vector<int> vec_i(a,a+5);

02 vector的使用

#include<vector>

vector<int> arr;

arr.push_back(9);//在arr结尾插入数字9
arr.pop_back();//删除arr末尾最后一个项
arr.front();//arr的第一个项的值
arr.back();//arr的最后一个项的值
arr.begin();//arr的第一个项的指针
arr.end();//arr的最后一个项的指针
arr.size();//arr的实际长度
arr.erase(arr.begin(),arr.end());//删除从arr的第一个到最后一个项
arr.insert(arr.begin(),5);//在arr的头之前插入数字5
arr.insert(arr.begin(),6,5);//在arr的头之前插入6个5
arr.empty();//判断arr是否为空
arr.clear();//将arr清空


#include<algorithm>

sort(arr.begin(),arr.end());
//对vector排序

stable_sort(arr.begin(),arr.end());
//对vector稳定排序

reverse(arr.begin(),arr.end());
//反转vector

vector<int>::iterator newend = unique(arr.begin(),arr.end());
//对arr去重,并把去重后的实际个数存在迭代器newend里面

arr.erase(newend,arr.end());
//把从newend到arr最后一项(即重复的数字)去除ces

测试代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    cout<<"Vector functions:"<<endl;
    vector<int> arr;
    arr.push_back(9);
    arr.push_back(3);
    arr.push_back(5);
    arr.push_back(5);
    arr.push_back(7);
    arr.push_back(5);
    arr.push_back(3);
    arr.push_back(4);
    arr.push_back(2);
    arr.push_back(1);
    cout<<"arr.push_back() : ";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    arr.pop_back();
    cout<<"arr.pop_back()  : ";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    cout<<"arr.front()     : "<<arr.front()<<endl;
    
    cout<<"arr.back()      : "<<arr.back()<<endl;
    
    cout<<"arr.size()      : "<<arr.size()<<endl;
    
    arr.erase(arr.begin()+4,arr.end());
    cout<<"arr.erase()     : ";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    arr.insert(arr.begin(),6,5);
    cout<<"arr.insert()    : ";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    cout<<endl<<endl<<"Algorithm functions:"<<endl;
    
    sort(arr.begin(),arr.end());
    cout<<"sort():";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    reverse(arr.begin(),arr.end());
    cout<<"reverse():";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    vector<int>::iterator oldend = arr.end();
    vector<int>::iterator newend;
    newend = unique(arr.begin(),arr.end());
    arr.erase(newend,oldend);
    cout<<"unique():";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    cout<<endl<<endl<<"Vector functions:"<<endl;
    
    cout<<"arr.empty()     : ";
    if(arr.empty() == false){
        cout<<"false"<<endl;
    }
    else{
        cout<<"true"<<endl;
    }
    
    arr.clear();
    cout<<"arr.clear()     : ";
    for(int i = 0;i<arr.size();i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    
    cout<<"arr.empty()     : ";
    if(arr.empty() == false){
        cout<<"false"<<endl;
    }
    else{
        cout<<"true"<<endl;
    }
}
发布了137 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34170700/article/details/104090375
今日推荐