zoukankan      html  css  js  c++  java
  • vector相关操作总结

    #include <iostream>
    #include <vector>
    using namespace std;
    
    
    void print_vec(const std::vector<int>& vec)
    {
        for (auto x : vec) {
            std::cout << ' ' << x;
        }
        std::cout << '
    ';
    }
    
    int main()
    {
        vector<int> vecInt;
        vecInt.push_back(1);
        vecInt.push_back(2);
    
        /////////一.元素访问 /////////////
        //1.at会进行越界检查 越界时,会报std::out_of_range的异常      //而[]操作, 会报断言错误, 这个try是抓取不了的
        try
        {
            cout << vecInt.at(2) << endl;
        }
        catch (std::out_of_range)
        {
            cout << "存在越界问题" << endl;
        }
        
        //2.front() 第一个元素
        cout << "第一个元素: " << vecInt.front() << ", 地址: "<<  &(vecInt.front())<< endl;
        //3.back() 最后一个元素
        cout << "最后一个元素: " << vecInt.back() << ", 地址: " << &(vecInt.back()) << endl;
        //4. data() 返回第一个元素对应的地址 !!记得带()
        cout << "data():" << vecInt.data() << endl;
        cout << "data+1:" << vecInt.data() + 1 << endl; //指针加1,就是指向下一个元素.
    
        /////////二.迭代器 /////////////
        //1.begin,cbegin 后者返回一个const_iterator,表示所指向的数据不能够修改,类似有常量指针吧.
        //2.end, cend 前者指向vector最后元素的后一元素,该元素表现为占位符,访问会导致未定义行为.
        //3.rbegin, rcbegin 前者指向容器最后元素,若vector为空,则返回值等于rend().
    
    
        /////////三.容量 /////////////
        //1.empty()
        cout << "Is empty?" << vecInt.empty() << endl;
        //2.size() 当前vector元素的个数
        cout << "size():" << vecInt.size() << endl;
        //3.max_size() 此值反映容器大小上的理论上限,可用的RAM总量会影响该值.
        cout << "Maximum size of a 'vector' is" << vecInt.max_size() << endl;
        //4.reserve(new_cap) 增加vector的容量.若new_cap大于当前的capacity(),则分配新内存,此时所有迭代器和引用都被非法化,否则不做处理.
        //reserve()不更改vector的size().
        //5.capacity() 返回分配的容量值
        cout << "capacity(): " << vecInt.capacity() << endl;
        //6.shrink_to_fit请求移除未使用的容量
        vector<int> vecInt2;
        cout << "default capacity:" << vecInt2.capacity() << endl;
        vecInt2.reserve(100);
        cout << "after reserve capacity:" << vecInt2.capacity() << endl;
        vecInt2.clear();
        cout << "after clear capacity:" << vecInt2.capacity() << endl;
        vecInt2.shrink_to_fit();
        cout << "after shrink_to_fit capacity:" << vecInt2.capacity() << endl;
    
        /////////四.修改器 /////////////
        //1.clear() 清空vector,执行后size()为0
        //2.insert(pos, n, val),其中n可以省略:表示插入到pos前面,返回值是插入元素的迭代器.
        //insert(iterator pos, InputIt first, InputIt last);可以插入容器类型的元素的全部或者部分.
        std::vector<int> vec(3, 100);
        print_vec(vec);
        cout << "capacity1:" << vec.capacity() << endl;
    
        auto it = vec.begin();
        it = vec.insert(it, 200);
        print_vec(vec);
        cout << "capacity2:" << vec.capacity() << endl;
    
        it = vec.insert(it, 2, 300);
        print_vec(vec);
        cout << "capacity3:" << vec.capacity() << endl;
    
        // "it" 不再合法,获取新值:
        it = vec.begin();
    
        std::vector<int> vec2(2, 400);
        vec.insert(it + 2, vec2.begin(), vec2.end());
        print_vec(vec);
        cout << "capacity4:" << vec.capacity() << endl;
    
        int arr[] = { 501,502,503 };
        vec.insert(vec.begin(), arr, arr + 3);
        print_vec(vec);
        cout << "capacity5:" << vec.capacity() << endl;
    
        //3.erase(pos) 移除位于pos的元素
        //erase(first, last) 移除范围[first, last)的元素 
        //会非法化位于擦除点或之后的迭代器,包含end()迭代器.
    
        //4.push_back 
        //5.pop_back 移除末尾元素
        //swap(vector &other) 将内容与other交换.
        vector<int> vecInt3;
        vecInt3.swap(vecInt);
        cout << "vecInt:";
        print_vec(vecInt);
        cout << "vecInt3:";
        print_vec(vecInt3);
        return 0;
    }

     

    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    【并查集】亲戚
    【图论】Car的旅行线路 NOIP 2001
    【贪心】排座椅
    【DP】花店橱窗布置
    【NOIP】NOIP考纲总结+NOIP考前经验谈
    【NOIP】考前须知
    NOIP 2016 PJ T4 魔法阵
    NOIP 2016 PJ T3 海港
    【高精度】麦森数 NOIP 2003
    【带权并查集】食物链 NOIP 2001
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/12690302.html
Copyright © 2011-2022 走看看