[C++ 从入门到放弃-01]C++STL之vector

[vector 简介]
vector容器可以像数组那样进行随机的访问,还可以在尾部进行插入元素,是一种简单高效的容器,完全可以替换掉数组。

vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的整理所占用的内存空间。

vector容器的下标也是从0开始计数的。

vector容器的定义:

  1. 可以事先固定大小,事后可以随时间调整大小。

  2. 事先不定义,随时使用push.back()方法从尾部扩张元素

  3. 使用insert()在某个元素位置前插入新元素。

vector容器有两个重要的方法:

  1. begin() 返回的是首元素位置的迭代器

  2. end() 返回的是最后一个元素的下一个元素位置的迭代器

[创建vector对象]

# 1. 不指定容器的元素个数
 vector<int> v;
# 2. 指定元素个数,下标是0-9,并且每个元素默认初始值为0
 vector<double> v(10);  
# 3.指定元素个数,并且为每个元素赋初始值
 vector<double> v(10, 8.6);
# 4.二维vector的定义,下面我们定义了50个vector。
 vector<int> v[50]

下标方式访问vector元素,用迭代器访问vector元素

常使用迭代器配合循环语句来对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致

#include<iostream>  
#include<vector>  
using namespace std;  

int main()  
{  
    vector<int> v(3);  

    //通过下标访问   
    v[0] = 2;  
    v[1] = 7;  
    v[2] = 9;  

    vector<int>::iterator it;//定义迭代器变量  
    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;  
    return 0;   
}  

[元素的插入]
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间 ,插入位置后的所有元素依次向后挪动一个位置,

insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。

#include<iostream>  
#include<vector>  
using namespace std;  

int main()  
{  
    vector<int> v(3);  
    v[0] = 2;  
    v[1] = 7;  
    v[2] = 9;  

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

    //在第2个元素前插入新元素1,vector从0开始计数  
    v.insert(v.begin()+2, 1);  

    vector<int>::iterator it;  
    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;   
    return 0;  
}  

[元素的删除]
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法则一次性删除vector中的所有元素

#include<iostream>  
#include<vector>  
using namespace std;  

int main()  
{  
    vector<int> v(3);  
    v[0] = 2;  
    v[1] = 7;  
    v[2] = 9;  

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

    //在第2个元素前插入新元素1,vector从0开始计数  
    v.insert(v.begin()+2, 1);  

    vector<int>::iterator it;  
    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;   
    return 0;  
}  

[元素的删除]
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法则一次性删除vector中的所有元素

#include<iostream>  
#include<vector>  
using namespace std;  

int main()  
{  
    vector<int> v(10);  
    for(int i = 0; i < 10; i ++)  
        v[i] = i;  

    //删除第2个元素,从0开始计数  
    v.erase(v.begin()+2);   

    vector<int>::iterator it;  
    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;   

    //删除迭代器第1个到第5个区间的所有元素   
    v.erase(v.begin()+1, v.begin()+5);  

    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;   

    //清空向量  
    v.clear();  
    cout<<v.size()<<endl;   
    return 0;   
}  

[reverse()在vector中的使用]

reverse()反向排列算法,需要头文件#include

reverse()算法可将向量中某段迭代器区间元素反向排列

#include<iostream>  
#include<vector>  
#include<algorithm>  
using namespace std;  

int main()  
{  
    vector<int> v(10);  

    for(int i = 0; i < 10; i ++)  
        v[i] = i;  

    //反向排列向量从头到尾的元素  
    reverse(v.begin(), v.end());  

    vector<int>::iterator it;  
    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;  

    //反向排列向量前5个元素   
    reverse(v.begin(), v.begin()+5);  
    for(it = v.begin(); it != v.end(); it ++)  
        cout<<*it<<" ";  
    cout<<endl;  
    return 0;  
}  

[sort()在vector中的使用]
使用sort()算法,需要申明#include

sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列

#include<iostream>  
#include<vector>  
#include<algorithm>  
using namespace std;  

int main()  
{  
    vector<int> v;  

    for(int i = 0; i < 10; i ++)  
        v.push_back(9-i);  

    //输出排序前   
    for(int i = 0; i < 10; i ++)  
        cout<<v[i]<<" ";  
    cout<<endl;  

    //排序 升序排序  
    sort(v.begin(), v.end());  
    for(int i = 0; i < 10; i ++)  
        cout<<v[i]<<" ";  
    cout<<endl;  
    return 0;     
}  

还可以自己设计排序比较函数,然后,吧这个函数指定给sort算法,sort就根据这个比较函数指定的排序规则进行排序,设计一个排序比较函数cmp

#include<iostream>  
#include<vector>  
#include<algorithm>  
using namespace std;  

//自行设计排序比较函数:对元素进行降序排列  
bool cmp(const int &a, const int &b)  
{  
    if(a != b)  
        return a > b;  
    else  
        return a > b;  
}   


int main()  
{  
    vector<int> v;  

    for(int i = 0; i < 10; i ++)  
        v.push_back(i);  

    //输出排序前   
    for(int i = 0; i < 10; i ++)  
        cout<<v[i]<<" ";  
    cout<<endl;  

    //排序 升序排序  
    sort(v.begin(), v.end(), cmp);  
    for(int i = 0; i < 10; i ++)  
        cout<<v[i]<<" ";  
    cout<<endl;  
    return 0;     
}  

[vector的大小]
使用size()方法可以返回向量的大小,即向量元素的个数

[vector是否为空]
使用empty()方法返回向量是否为空

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值