[C++学习笔记10]vector

  1. vector简介
      vector是一种类型的对象的集合;
      vector的数据结构很像数组,能非常高效和方便的访问单个元素;
      vector是一个类模板(class template)
      要使用vector必须包含相关头文件
        #include <vector>
        using std::vector;

  2. vector对象的初始化
      vector<T> v1; // 默认构造函数v1为空
      vector<T> v2(v1); // v2是v1的副本
      vector<T> v3(n, i); // v3包含n个值为i的元素
      vector<T> v4(n); // v4含有值初始化的元素的n个副本

  3. vector常用成员函数
      size(), clear(), back(), empty(), push_back(), pop_back(), erase(), insert(), [], =, 重载的运算符
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    void show_vector_1(const vector<int> &v)
    {
        for (int i = 0; i < v.size(); i++)
        {
            cout << v[i] << endl;
        }
        cout << endl;
    }
    
    void show_vector_2(const vector<int> &v)
    {
        // 根据我们前面对++的重载,明显后置++的效率比前置++的效率低,所以采用前置++
        for (vector<int>::const_iterator it = v.begin(); it != v.end(); ++it)
        {
            cout << *it << endl;
        }
        cout << endl;
    }
    
    int main(void)
    {
        vector<int> v1;
        v1.push_back(1);
        v1.push_back(2);
        v1.push_back(3);
        v1.push_back(4);
        v1.push_back(5);
        v1.push_back(3);
    
        //cout << v1.size() << endl; // 6
        //cout << v1.back() << endl; // 3
        /*v1.pop_back();
        cout << v1.back() << endl; // 5 */
        /*v1.erase(v1.begin() + 1, v1.begin() + 3);
        show_vector_2(v1); // 1 4 5 3*/
    
        // 有想法删除容器中的所有值为3的元素
        // 使用算法中的remove函数
        //remove(v1.begin(), v1.end(), 3); // 并不能正真移除
    // remove 与 erase区别:erase一般要删除元素,释放资源。remove主要用在vector中,用于将符合要求的的元素移动到容器尾部,并不删除元素。
    v1.erase(remove(v1.begin(), v1.end(), 3), v1.end()); // 这样才行 show_vector_2(v1); return 0; }

     

  4. 另一种方法删除容器中指定的元素
      通过迭代器循环遍历删除

    #include <iostream>
    #include <vector>
    using namespace std;
    
    void show_vector(const vector<int> &v)
    {
        // 根据我们前面对++的重载,明显后置++的效率比前置++的效率低,所以采用前置++
        for (vector<int>::const_iterator it = v.begin(); it != v.end(); ++it)
        {
            cout << *it << endl;
        }
        cout << endl;
    }
    
    // 通过迭代器循环删除
    void delete_vector(vector<int> &v, int data)
    {
        for (vector<int>::const_iterator it = v.begin(); it != v.end(); )
        {
            if (*it == data)
                it = v.erase(it); // 删除成功返回下一个元素的迭代器
            else
                ++it;
        }
    }
    
    int main(void)
    {
        vector<int> v1;
        v1.push_back(1);
        v1.push_back(2);
        v1.push_back(3);
        v1.push_back(4);
        v1.push_back(5);
        v1.push_back(3);
    
        cout << "删除前:" << endl;
        show_vector(v1);
        
        delete_vector(v1, 3);
        cout << "删除后:" << endl;
        show_vector(v1);
    
        return 0;
    }

     


      
posted @ 2015-05-23 17:29  IFPELSET  阅读(190)  评论(0编辑  收藏  举报