vector简单使用

在刷ccf题的时候日常做完去网上查看别的同学怎么做的

发现有使用vector后三十几行代码就写出来的,虽然时间复杂度和我一样十几毫秒,but !我看中了它的代码量啊!多么的少啊!

所以百度了vector的使用方法,这里,只总结一些我暂时会用到的

 

1.简单的介绍vector:

在c++语言中使用,是一种顺序容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。/ps 官方用语

2.什么时候使用

如果你想使用数组来进行插入删除查找时,其中会不可避免的遇到移动一大堆的数组元素,比如某个元素的值被删除,那么后面的都要向前移动的时候,推荐你使用vector,因为它不考虑数组下标啊!!!通过指针删除元素的值可以说非常方便了!节省了很大的时间啦,但是问题也是在这里出现:在中间插入与删除慢,emmm这个慢其实比大容量数组我们自己移动快很多好伐

3怎么使用:

头文件:

 

#include <vector> 

 

基本操作:

//容量
vec.size();//向量大小
vec.max_size();//向量最大容量
vec.resize();//更改向量大小
vec.capacity();//向量真实大小
vec.empty();//向量判空
vec.shrink_to_fit(); //减少向量大小到满足元素所占存储空间的大小
//修改
vec.assign(); //多个元素赋值,类似于初始化时用数组进行赋值
vec.push_back();//末尾添加元素 
vec.pop_back();//末尾删除元素
vec.insert();//任意位置插入元素
vec.erase();//任意位置删除元素
vec.swap();//交换两个向量的元素
vec.clear();//清空向量元素
//迭代器
vec.begin();//开始指针
vec.end(); //指向最后一个元素的下一个位置
vec.cbegin(); //指向常量的开始指针,意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
vec.cend();//指向常量的末尾指针: 
//元素的访问
vec[1]; //下标访问,并不会检查是否越界
vec.at(1); //at方法访问,以上两者的区别就是at会检查是否越界,是则抛出out of range异常
vec.front();//访问第一个元素:
vec.back();//访问最后一个元素: 
int* p = vec.data(); //返回一个指针,可行的原因在于vector在内存中就是一个连续存储的数组,所以可以返回一个指针指向这个数组。

4.使用案例

 

#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    int num;
    vector<int>v1;            //定义vector 
    vector<int>::iterator it; //定义vector迭代器 
    cout<<"请输入5个整数:"<<endl; 
    for(int i = 1;i <= 5;i++)
    {
        cin>>num;
        v1.push_back(num);
    }
    printf("\n");
    for(it = v1.begin();it != v1.end();it++)
        cout<<*it<<" ";     
    cout<<endl;
    it = v1.begin(); 
    it += 1;
    cout<<"第二个数为: "<<*it<<"    "<<endl;
    v1.erase(it);            //删除倒数第二个数 
    it = v1.begin();
    it += 1;
    cout<<"删除之前第二个数后,新的第二个数为:"<<*it<<"   "<<endl;
    v1.clear();
    cout<<"清空后元素个数为:"<<v1.size()<<endl;
     
    return 0;
} 

 

可以看见,我们删除一个元素后,该位置自动由后面的元素填充,不需要我们手工移啊移,而且也不需要实现定义数组的大小,避免溢出,很方便啦

 

posted @ 2018-08-25 17:43  achived  阅读(560)  评论(0编辑  收藏  举报