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
  • 相关阅读:
    flink 读取kafka 数据,partition分配
    Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
    flume接收http请求,并将数据写到kafka
    【翻译】Flume 1.8.0 User Guide(用户指南) Processors
    【翻译】Flume 1.8.0 User Guide(用户指南) Channel
    【翻译】Flume 1.8.0 User Guide(用户指南) Sink
    【翻译】Flume 1.8.0 User Guide(用户指南) source
    【翻译】Flume 1.8.0 User Guide(用户指南)
    Apache Flink 简单安装
    Java之使用IDE
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/12690302.html
Copyright © 2011-2022 走看看