美文网首页
STL - vector

STL - vector

作者: 大地瓜_ | 来源:发表于2018-10-02 16:32 被阅读0次

    一、vector主要特征

    • vector实际上就是对动态数组封装;
    • 可以像数组一样可以使用下标访问元素,若vector长度为n, 则其下标为 0~n-1
    • 根据下标访问元素效率高;
    • vector对象的空间随着插入删除操作自动调整;
    • 空间自动调整比较耗费时间,因此频繁插入删除的情况下,vector效率稍差;

    二、vector创建对象

    创建一个空向量
    vector<int> v1; // int 类型向量 
    vector<string> s1; // string 类型向量
    
    从已有向量复制创建向量
    vector<int> v2( v1 ); // 拷贝v1内容到v2(拷贝构造函数)
    
    创建10个元素的向量 
    vector<string> s2( 10 );
    
    创建10个元素的向量,所有元素都是 1.5 
    vector<double> v3( 10, 1.5 );
    
    创建向量指针
    vector<int> *pvec = new vector<int>( 10, -5 );
    

    三、vector操作

    • 添加和删除元素
    vector 尾部添加元素
    vector<int> v1; v1.push_back(1);
    
    vector 任意位置插入元素
    v1.insert(v1.begin(),0);  // 头部插入
    v1.insert(v1.end(), 4); //尾部插入 
    v1.insert(v1.end()-1,3); //倒数第二位置
    //v1.begin(), v1.end() 获取相应位置的迭代器
    
    vector 删除最后一个元素
    v1.pop_back();  // 删除最后一个元素
    
    vector 删除任意位置元素
    v1.erase(v1.begin());  // 删除第一个元素
    v1.erase(v1.begin(), v1.end());  // 删除全部元素
    
    • vector向量大小相关的函数
    v.size() 返回向量的大小
    v.empty() 返回向量是否为空
    
    • vector向量上面的迭代器
    1、向量上的迭代器定义、使用: 
       vector<int>::iterator it;  *it = 5;
    
    2、每种容器都定义了一对begin和end的函数,用于返回迭代器。
    如果容器中有元素,由begin返回的迭代器指向第一个元素:
    
    it = v1.begin(); // 指向v1[0]
    
    3、由end返回的迭代器指向vector的末端元素的下一个。
    通常称为超出末端迭代器,表明它指向了一个不存在的元素
    
    it = v1.end(); // 指向末端元素的下一个
    
    如果vector为空,begin返回的迭代器与end返回的迭代器相同
    
    • vector常用的算法
    void sort( first, last)
    first和last这两个参数都是容器的迭代器,它们给出了容器中的查找区间起点和终点;
    
    ********  example ***********
    
    sort(v.begin(),v.end());
    vector<string>::iterator it;
    for(it=v.begin(); it!=v.end();it++)
    cout<< *it <<" ";
    
    find( first, last, val)
    1、first 和 last 这两个参数都是容器的迭代器,它们给出了容器中的查找区间起点和终点;
    2、这个区间是个左闭右开的区间[first,last);
    3、val参数是要查找的元素的值;
    4、函数返回值是一个迭代器。如果找到,则该迭代器指向被找到的元素。如果找不到,则该迭代器指向查找区间终点;
    
    ********  example ***********
    
    vector<int> v(5,3); vector<int>::iterator p;
    p = find(v.begin(),v.end(),3);
    if( p!=v.end()) cout<<*p<< endl;
    p = find(v.begin(),v.end(),5);
    if( p==v.end()) cout<<"not found\n"; 
    
    
    replace( first, last, old, new ) // first, last为迭代器 作用:将 [ first,last ) 范围内的所有值为old的替换为new
    reverse(start, end) // start, end为迭代器 作用:将序列中 [start, end) 范围反转排列顺序
    count(start, end, searchValue) // start, end为迭代器 作用:统计[start, end) 范围内等于searchValue的元素个数
    accumulate(first, last, init) // first, last为迭代器 作用:将[ first,last )范围内的所有值相加,再加上init后返回
    

    三、常见序列容器

    屏幕快照 2018-10-02 下午4.14.03.png 屏幕快照 2018-10-02 下午4.14.18.png 屏幕快照 2018-10-02 下午4.14.31.png

    相关文章

      网友评论

          本文标题:STL - vector

          本文链接:https://www.haomeiwen.com/subject/ftxaoftx.html