zoukankan      html  css  js  c++  java
  • C++中vector的使用总结

    vector简单说明

    vector也是一个容器,并且是个顺序容器。顺序容器有可变长数组vector双向链表list双端队列deque
    顺序容器的定义,是因为容器元素的位置和他们的值大小无关,也就是说顺序容器不排序。
    所有的容器都有以下两个方法:

        int size() : 返回容器对象中元素的个数
        bool empty(): 判断容器对象是否为空
    

    顺序容器还有以下成员函数:

    begin():返回指向容器中第一个元素的迭代器。
    
    end():返回指向容器中最后一个元素后面的位置的迭代器。
    
    rbegin():返回指向容器中最后一个元素的反向迭代器。
    
    rend():返回指向容器中第一个元素前面的位置的反向迭代器。
    
    erase(...):从容器中删除![](https://img2018.cnblogs.com/blog/1169804/201903/1169804-20190310230711138-1115905688.png)
    

    一个或几个元素。该函数参数较复杂,此处省略。

    clear():从容器中删除所有元素。
    
    front():返回容器中第一个元素的引用。
    
    back():返回容器中最后一个元素的引用。
    
    push_back():在容器末尾增加新元素。
    
    pop_back():删除容器末尾的元素。
    
    insert(...):插入一个或多个元素。该函数参数较复杂,此处省略。
    

    迭代器的使用

    迭代器是一个变量,迭代器可以指向容器中的元素,和指针类似。
    迭代器的定义方式有以下几种:

    1. 正向迭代器

      容器类名::iterator 迭代器名;

    2. 反向迭代器

      容器类名::reverse_iterator 迭代器名;

    3. 常量正向迭代器

      容器类名::const_iterator 迭代器名;

    4. 常量反向迭代器

      容器类名::const_reverse_iterator 迭代器名;

    迭代器的使用示例

    vector<int> a;
    vector<int>::iterator pr;
    for(int i = 0; i < 3; i++)
    {
    
        a.push_back(i);
    }
    
    cout << a.size()<<endl;
    cout << a.back()<<endl;
    
    cout << "使用数组形式遍历vector内容"<< endl;
    for(int i = 0; i < a.size(); i++){
        cout << a[i] << "  " ;
    }
    
    cout << "使用正向迭代器形式遍历vector内容"<< endl;
    for(pr = a.begin(); pr != a.end(); pr++){
    
        //这里*pr就是迭代器pr指向的元素
        cout << *pr << "  ";
    }
    
    cout << endl;
    
    cout << "使用反向迭代器形式遍历vector内容"<< endl;
    vector<int>::reverse_iterator prr;
    
    for(prr = a.rbegin(); prr != a.rend(); prr++){
    
        cout << *prr * 3 << "  ";
    }
    
    cout << endl;
    

    vector的成员函数以及作用

    vector()                        无参构造函数,将容器初始化为空
    
    vector(int n)                 将容器初始化为有 n 个元素
    
    vector(int n, const T & val)             假定元素的类型是 T,此构造函数将容器初始化为有 n 个元素,每 个元素的值都是 val
    
    vector(iterator first, iterator last)            first 和 last 可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致
    
    void clear()                                    删除所有元素
    
    bool empty()                                  判断容器是否为空
    
    void pop_back()                            删除容器末尾的元素
    
    void push_back( const T & val)    将 val 添加到容器末尾
    
    int size()                                        返回容器中元素的个数
    
    T & front()                                      返回容器中第一个元素的引用
    
    T & back()                                      返回容器中最后一个元素的引用
    
    iterator insert(iterator i, const T & val)            将 val 插入迭代器 i 指向的位置,返回 i
    
    iterator insert( iterator i, iterator first, iterator last)            将其他容器上的区间 [first, last) 中的元素插入迭代器 i 指向的位置
    
    iterator erase(iterator i)                    删除迭代器 i 指向的元素,返回值是被删元素后面的元素的迭代器
    
    iterator erase(iterator first, iterator last)                删除容器中的区间 [first, last)
    
    void swap( vector <T> & v)             将容器自身的内容和另一个同类型的容器 v 互换
    

    vector的示例用法

    #include<iostream>
    #include<vector>
    
    int main(){
    
    int a[4] = {1,3 ,2, 5};
    
    vector<int> v(a,a+4); //将数组a的内容写入v
    cout << "1) v.size = " << v.end() - v.begin() << endl;
    
    cout << "2) " << "use iterator ";
    vector<int>::iterator p ;
    for(p = v.begin(); p != v.end();p++)
        cout << *p << " ";
    cout << endl;
    
    //删除第二个元素
    v.erase(v.begin() + 1);
    cout << "3) " << "after delete second element ";
    for(p = v.begin(); p != v.end();p++)
        cout << *p << " ";
    cout << endl;
    
    //在第二个元素后加入13
    v.insert(v.begin()+1,13);
    cout << "4) " << "insert 13 after second element ";
    for(p = v.begin(); p != v.end();p++)
        cout << *p << " ";
    cout << endl;
    
    
    //使用vector的其他构造函数
    vector<int> pa(5,10);
    cout << "5) " << "use another struct function ";
    for(p = pa.begin(); p != pa.end();p++)
        cout << *p << " ";
    cout << endl;
    
    //将V插在pa开头
    pa.insert(pa.begin(),v.begin(),v.end());
    cout << "6) " << "insert all of v into pa ";
    for(p = pa.begin(); p != pa.end();p++)
        cout << *p << " ";
    cout << endl;
    
    //删除第二个到第四个之间的元素
    pa.erase(pa.begin() + 1,pa.begin()+3);
    cout << "7) " << "after delete elements that locate at 2th and 4th ";
    for(p = pa.begin(); p != pa.end();p++)
        cout << *p << " ";
    cout << endl;
    
    return 0;
    }
    

    输出结果如下所示:

  • 相关阅读:
    告别恼人的水平滚动条——滚动条宽度到底是多少?
    A用户控件包含B用户控件,在B里头如何取得A控件
    ASP.NET URL重写
    Asp.net(c#)发送电子邮件
    优化网站性能的14条规则
    复杂度的来源—高性能
    构建命令行式交易区块链应用
    复杂度来源—低成本、安全、规模
    实现一个简易的区块链
    复杂度来源—可扩展性
  • 原文地址:https://www.cnblogs.com/zuixime0515/p/10507187.html
Copyright © 2011-2022 走看看