首页 > 编程语言 >C++ vector的超级详细实用用法

C++ vector的超级详细实用用法

时间:2024-11-24 23:02:06浏览次数:7  
标签:函数 int 元素 C++ 用法 vector include cout

  1. 基本概念
    • vector是 C++ 标准模板库(STL)中的一个容器,定义在<vector>头文件中。它可以被看作是一个动态大小的数组,能够在运行时高效地添加或删除元素。这与普通数组不同,普通数组在创建时大小是固定的,而vector的大小可以根据需要自动增长或缩小。
  2. 主要特点
    • 动态大小
      • 例如,你可以创建一个空的vector,然后根据程序的运行情况逐个添加元素。
        #include <iostream>
        #include <vector>
        using namespace std;
        int main()
        {
            vector<int> N;
            N.push_back(1);
            N.push_back(2);
            cout << "vector的大小为: " << N.size() << endl;
            return 0;
        }

      • 在这个例子中,首先创建了一个空的vector<int>(存储整数的vector),然后通过push_back函数分别添加了两个元素12,最后输出vector的大小,结果为2
    • 随机访问
      • vector支持像普通数组一样的随机访问,通过下标运算符[]来访问元素。
        #include <iostream>
        #include <vector>
        using namespace std;
        int main()
        {
            vector<int> N = {1, 2, 3};
            cout << "第二个元素为: " << N[1] << endl;
            return 0;
        }
      • 这里创建了一个包含三个元素的vector<int>,然后通过N[1]访问并输出第二个元素(注意下标从0开始),结果为2。
    • 内存管理
      • vector会自动管理内存。当vector中的元素数量增加,当前分配的内存不足以容纳新元素时,它会自动重新分配一块更大的内存空间,并将原有元素复制到新的内存中。不过,频繁地进行内存重新分配可能会影响性能,C++ 提供了一些方法来优化这个过程,比如reserve函数。
        #include <iostream>
        #include <vector>
        using namespace std;
        int main()
        {
            vector<int> N;
            N.reserve(10);  // 预先分配能容纳10个元素的内存空间
            for (int i = 0; i < 5; i++)
                N.push_back(i);
            cout << "vector的大小为: " << N.size() << endl;
            cout << "vector的容量为: " << N.capacity() << endl;
            return 0;
        }
      • 在这个例子中,首先使用reserve函数为vector预先分配了能容纳10个元素的内存空间,然后添加了5个元素。通过size函数获取vector中实际元素的数量,通过capacity函数获取当前已经分配的内存能够容纳的元素数量,输出结果为vector的大小为5,容量为10
    • 常用操作
      • 添加元素
        • 除了前面提到的push_back函数,它用于在vector的末尾添加一个元素,还有insert函数可以在指定位置插入元素。
          #include <iostream>
          #include <vector>
          using namespace std;
          int main()
          {
              vector<int> N = {1, 2, 4};
              N.insert(N.begin() + 2, 3);  //在第三个位置(下标为2)插入元素3
              for (int i : N)
                  cout << i << " ";
              cout << endl;
              return 0;
          }

        • 这个例子中,通过insert函数在vector的指定位置插入了一个元素,然后使用范围for循环输出vector中的所有元素,结果为1 2 3 4
      • 删除元素
        • vector提供了erase函数来删除指定位置的元素或者一个范围内的元素。
          #include <iostream>
          #include <vector>
          using namespace std;
          int main()
          {
              vector<int> N = {1, 2, 3, 4};
              N.erase(N.begin() + 1);  //删除第二个元素(下标为1)
              for (int i : N)
                  cout << i << " ";
              cout << endl;
              return 0;
          }
        • 这里使用erase函数删除了vector中的第二个元素,然后输出剩余的元素,结果为1 3 4
      • 遍历元素
        • 可以使用多种方式遍历vector中的元素。除了前面提到的范围for循环,还可以使用传统的for循环结合size函数来遍历。
          #include <iostream>
          #include <vector>
          using namespace std;
          int main()
          {
              vector<int> N = {1, 2, 3};
              for (int i = 0; i < N.size(); i++)
                  cout << N[i] << " ";
              cout << endl;
              return 0;
          }
        • 这个例子通过传统的for循环,利用size函数获取vector的大小作为循环条件,使用下标运算符[]访问元素并输出,结果与范围for循环相同,为1 2 3

标签:函数,int,元素,C++,用法,vector,include,cout
From: https://blog.csdn.net/2401_86982397/article/details/144007829

相关文章

  • C++解决:翻硬币、飞行员兄弟、费解的开关
    1.翻硬币小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能......
  • not in 和 not exists 比较和用法
    尽量不要使用notin(它会调用子查询),而尽量使用notexists(它会调用关联子查询)。查询语句使用了notin,那么对内外表都进行全表扫描,没有用到索引;而notexists的子查询依然能用到表上的索引。所以无论哪个表大,用notexists都比notin要快。NOTIN查询返回空结果:即使在子查询中过滤......
  • 【C++语法】构造函数初始化列表
    初始化列表相较于在构造函数体中赋值,有以下几个优势:1.避免多次构造对于某些类型的成员变量(如const或引用类型),它们必须在初始化列表中进行初始化,不能在构造函数体中赋值。例如:classExample{  private:    constinta;//常量成员    int&ref;......
  • 【C++笔记】数据结构进阶之二叉搜索树(BSTree)
    【C++笔记】数据结构进阶之二叉搜索树(BSTree)......
  • 蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、
     下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! ! ! !关注博主,更多蓝桥杯nice题目静待更新:)动态规划一、数字三角形【问题描述】        上图给出了一个数字三角形。从三角形的顶部到底部有很......
  • 蓝桥杯c++算法学习【5】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷
     别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! ! !!!关注博主,更多蓝桥杯nice题目静待更新:)枚举与模拟一、卡片:【问题描述】        小蓝有很多数字卡片,每张卡片上都是一个数字(0到9)。         小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数......
  • c++(入门)
    1.引用引用的定义引用是另一个变量的别名,它在声明时必须被初始化,并且一旦初始化后,它就始终引用那个变量。引用的语法引用的声明方式是在变量名前加上&符号。引用的特点引用必须在声明时初始化。引用一旦初始化后,就不能再引用其他变量。引用不是独立的变量,它和它引用的......
  • c++的类和对象(1)
    1.类的引入类的引入是面向对象编程(OOP)中的一个基本概念,它代表了面向对象编程范式的核心。在C++中,类(Class)是一种用户定义的数据类型,它将数据表示(属性)和操作数据的方法(函数)组合成一个单一的实体。 classClassName{//类的成员变量(属性)//类的成员函数(方法)public:......
  • >>>、/deep/、::v-deep、::v-deep()、:deep()区别及用法
    现象:在Vue.js项目中,在使用组件化开发时,经常需要修改组件内部的样式,但Vue的样式封装特性(如<stylescoped>)会阻止外部样式直接作用于组件内部。引入穿透选择器:在Vue.js中, >>> 、 /deep/ 、 ::v-deep 、 ::v-deep()、:deep() 都是用于穿透组件样式封装的选择器。作用......
  • KTL 一个支持C++14写公式的K线工具 - 0.9.2版,通达信mdt全景数据复盘大盘,Qt自定义图表
    K,K线,Candle蜡烛图。T,技术分析,工具平台L,公式Language语言使用c++14,Lite小巧简易。项目仓库:https://github.com/bbqz007/KTL    国内仓库:https://gitee.com/bbqz007/KTL 当前0.9.2新添加功能基于QCharts跟通达信mdt数据文件。使用者能够使用QCharts自定义数据处理图表。......