顺序容器vector的整理


vector是C++标准库里的一个容器,也是平时使用频率最高的容器,在这里对vector的一系列操作进行总结;

1. vector的初始化

    vector<int> v1;//声明一个向量
    vector<int> v2(5);//声明5个元素的向量,初始值不确定
    vector<int> v3(5,1);//声明5个初始值为1的向量
    vector<int> v4(v3);//拷贝赋值
    vector<int> v5(v4.begin(),v4.end());
    vector<int> v6(v4.begin(),v4.begin()+3);//用另一个序列的部分来初始化
    vector<int> v7={1,2,3,4};//列表初始化,C++11支持

2.vector支持的操作

    //返回迭代器
    v.begin()/v.cbegin();//返回第一个元素的迭代器
    v.rbegin()/v.crbegin();
    v.end()/c.end();//返回最后一个元素之后的迭代器
    v.rend()/c.crend();

    //元素访问
    v.front();//返回第一个元素
    v.back();//返回最后一个元素
    v[i]/v.at(i); //返回第i个元素,可能不存在;


    //赋值
    void assign( size_type count, const T& value );
    void assign( InputIt first, InputIt last );
    void assign( std::initializer_list<T> ilist );//C++11支持
    vector& operator=( const vector& other );
    vector& operator=( vector&& other );//C++11支持
    vector& operator=( std::initializer_list<T> ilist );//C++11支持

    //容量
    bool empty() const;//判断容器是否为空;
    size_type size() const;//返回vector的已有元素的数量;
    size_type max_size() const//返回系统能容纳元素的数量;
    void reserve(size_type new_cap );//为vector预留new_cap的空间大小
    size_type capacity() const;//返回vector能容纳元素的数量
    void shrink_to_fit();//移除没有使用的空间 C++11支持

    //操作元素
    void clear();//清除所有的元素,size变为0;
    void push_back( const T& value );
    void push_back( T&& value );//C++11支持  **这里并不懂**
    void emplace_back( Args&&... args );//C++11支持  和push_back功能一样

    iterator insert( iterator pos, const T& value );
    iterator insert( const_iterator pos, const T& value );
    iterator insert( const_iterator pos, T&& value );//C++11 
    iterator insert( const_iterator pos, size_type count, const T& value );
    void insert( iterator pos, InputIt first, InputIt last);
    iterator insert( const_iterator pos, InputIt first, InputIt last );//在pos之前插入fisrt到last指向的序列,返回插入序列的第一个元素的迭代器,if first==last return pos;
    iterator insert( const_iterator pos, std::initializer_list<T> ilist );//可以插入初始化列别 C++11支持

    void pop_back();删除最后一个元素
    iterator erase( const_iterator pos );//删除pos指向的元素,返回下一个元素的迭代器
    iterator erase( const_iterator first, const_iterator last );//删除区间,返回删除的序列后一个元素的迭代器;
    void resize( size_type count );//将vector调整为count的大小
    void resize( size_type count, const value_type& value );//since C++11

    void swap( vector& other );//和另外一个vector交换

以上是vector几乎所有的操作,每个操作后面都有对功能的基本注解,但仍然有以下几个点应该注意:

  • C++11支持用列表初始化vector;由此导致有些操作可以传入初始化列表;
  • push_back和emplace_back的区别在于,前者传递的引用必须和vector的元素类型(T)一致,而后者可以是能够隐式转化为T的其他类型;
  • v[i]可以用来访问元素,切记不可用来赋值;赋值可能会有意想不到的后果;
  • 在像vector插入元素的时候,随着元素的增多,vector可能会出现元素的整体搬移,这个时候会出现迭代器失效的情况;在使用迭代器的时候需要注意;凡是涉及到改变vector的size的都应当引起注意;

小结
vector几乎是标准库除了string以外最常用的容器了,因此要熟练掌握它的每一个操作函数的使用。在整理的过程中会思考:操作函数的使用需要注意什么,同一个函数之间不同的重载版本之间的区别又是什么;将其整理下来,确实对vector的理解会更深。

参考引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值