• c++ vector用法详解


    1. 定义:

    向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)可以认为是一个动态数组,其中一个vector中的所有对象都必须是同一种类型的。

    2. 构造函数:

    2.1 一般情况

    • vector vecName(); // 构造一个空vector,其中包含的对象为int类型
    • vector vecName(3); // 构造一个空vector,其中包含的对象为int类型,大小为3
    • vector vecName(3,value); // 构造一个空vector,其中包含的对象为int类型,大小为3,对象均为value
    • vector vecName = { 1, 2, 3, 4 }; // 构造一个vector,初始值为[1,2,3,4]
    • vector vecName(vecName2); // 构造一个vector,初始值为另一个vector类型的vecName2

    2.2 将vec1的部分赋给vec2

    vector<int>::const_iterator First = vec1.begin() + 1; // 找到开始迭代器
    vector<int>::const_iterator Second = vec1.begin() + 4; // 找到结束迭代器
    vector<int> vec2(First, Second); // 将值直接初始化到vec2(需要注意包括开头,但不包括结尾,即vec2只包含vec[1]到vec[3]的元素)
    

    2.3 二维数组构造方法

    • vector<vector > vecName(3); // 构造一个二维vector,其中一个维度为3
    • vector<vector > vecName(3,vector(4)); // 构造一个3*4 的二维vector,其中默认值为0
    • vector<vector > vecName(3, vector(4,1)); // 构造一个3*4 的二维vector,值均为1
    • vector<vector > vecName = { {1, 2, 3}, {4, 5, 6} }; // 构造一个2*3 的二维vector,并赋值

    3. 增加元素:

    • vec1.push_back(x); // 在vec1的尾部添加一个元素x(注意:一般可以用emplace_back()代替,效率更高)
    • vec1.insert(iterator iter, x); // 在vec1的迭代器iter指向元素前增加一个元素x
    • vec1.insert(iterator iter, int n, x); // 在vec1的迭代器iter指向元素前增加n个元素x
    • vec1.insert(iterator iter, const_iterator first,const_iterator last); // 在vec1的迭代器iter指向元素前插入另一个相同类型向量的[first,last)间的数据

    4. 删除元素:

    • vec1.pop_back(); // 删除在vec1的最后一个元素
    • vec1.clear(); // 删除vec1中所有元素
    • vec1.erase(iterator iter); // 删除vec1中迭代器指向元素
    • vec1.erase(iterator first,iterator last); // 删除vec1中[first,last)中元素

    5. 使用元素:

    5.1 一般使用法

    • vec1[1]; // 使用下标方式
    • vec1.at(1); // 使用at方式
    • vec1.front(); // 使用第一个元素
    • vec1.back(); // 使用最后一个元素

    5.2迭代器指针使用法:

    • iterator begin(); // 返回向量头指针,指向第一个元素
    vector<int>::iterator d = vec1.begin();
    int d1 = *d;//vec1[0]
    
    • iterator end(); // 返回向量尾指针,指向向量最后一个元素的下一个位置
    vector<int>::iterator e = vec1.end() - 1;
    int e1 = *e;//vec1[last]`
    

    反向迭代器,是从后往前数的,即+1代表向前数一个元素

    • reverse_iterator rbegin(); // 反向迭代器,指向最后一个元素
    vector<int>::reverse_iterator f = vec1.rbegin();
    int f1 = *f;//vec1[last]`
    
    • reverse_iterator rend(); // 反向迭代器,指向第一个元素之前的位置,也就是vector[-1]
    vector<int>::reverse_iterator g = vec1.rend() - 1;
    int g1 = *g;//vec1[0]
    

    6. 判断是否为空:

    • bool empty() const:判断向量是否为空,若为空,则向量中无元素
    vector<int> vec1 = { 1, 2, 3, 4, 5 };
    bool i = vec1.empty();//输出:false
    vector<int> vec2 = {  };
    bool j = vec2.empty();//输出:true
    

    7. 大小函数:

    • unsigned int length = vec1.size()//vec1所含元素的个数

    8. 使用时的注意事项:

    8.1 头文件及其命名空间

    #include<vector>
    using namespace std;
    

    8.2 Vector 作为函数的返回值时,

    方法一:vector<int> fun1(int num);(不推荐)
    方法二:bool fun1(int num, vector<int> $&$vec);(推荐)

    8.3 将vec2中的内容追加到vec1的后面:

    vec1.insert(vec1.end(), vec2.begin(), vec2.end());

    8.4 最大最小元素及其索引:

    #include<algorithm>
    vector<double>::iterator biggest = max_element(begin(vec1), end(vec1));
    double biggestValue = *biggest;//最大值
    int biggestIndex = distance(begin(begin(vec1), biggest);//最大值索引
    vector<double>::iterator smallest = min_element(begin(vec1), end(vec1));
    double smallestValue = *smallest;//最大值
    int smallestIndex = distance(begin(begin(vec1), smallest);//最大值索引
    
    作者:云梦士
    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    在ubuntu下关闭笔记本触摸板
    (转载)实用小命令 windows下查看端口占用情况
    (转载)JBoss 4.2.3下部署EJB 3.0碰到的local和remote问题
    Windows下通过xmanager远程桌面控制Linux(转)
    SQL Server 事务日志的问题
    回归
    用友软件工程IT应用研究院
    关于Oracle数据库的死锁(转书摘)
    关于企业级Web2.0的一点想法
    关注Java的开源项目(中文版)
  • 原文地址:https://www.cnblogs.com/yunmeng-shi/p/15030423.html
Copyright © 2020-2023  润新知