C++ vector数组用法及解析

yizhihongxing

C++ vector数组用法及解析

什么是vector?

vector是C++标准程序库STL中的一个类模板,提供了封装动态数组的功能。支持在数组元素的末尾进行快速的插入和删除,还能够实现快速的随机访问。

vector是一个类模板,因此我们需要使用类模板来定义vector。定义vector对象时,需要指定所存储的元素类型。

vector常见操作

下面将具体介绍vector的一些常见操作。

定义vector

vector的定义语法如下:

vector <type> name;

其中,type指需要存储的元素类型,name为vector对象的名称。

例如:

vector<int> myVector;

定义一个名为myVector的vector对象,其中每个元素的类型为int。

插入元素

在vector的末尾插入元素,可以使用push_back()函数,代码示例如下:

vector<int> myVector;
myVector.push_back(2021);

以上代码在myVector的末尾插入了整数2021。

我们也可以在vector的任意位置插入元素,只需要使用insert()函数,示例代码如下:

vector<int> myVector = {1, 2, 3, 4, 5};
myVector.insert(myVector.begin() + 2, 100);

以上代码在myVector的索引为2的位置插入了整数100。

删除元素

从vector中删除元素时,可以使用erase()函数,示例代码如下:

vector<int> myVector = {1, 2, 3, 4, 5};
myVector.erase(myVector.begin() + 2);

以上代码从myVector中删除了索引为2的元素。

我们也可以在删除多个元素时,指定起始和结束位置,示例代码如下:

vector<int> myVector = {1, 2, 3, 4, 5};
myVector.erase(myVector.begin() + 2, myVector.end() - 1);

以上代码从myVector中删除了索引为2到索引为3的元素。

访问元素

可以通过[]操作符或at()函数访问vector中的元素,示例代码如下:

vector<int> myVector = {1, 2, 3, 4, 5};
cout << myVector[2] << endl; // 输出3
cout << myVector.at(2) << endl; // 输出3

以上代码分别输出myVector中索引为2的元素。

获取vector的长度

使用size()函数可以获取vector的长度,代码示例如下:

vector<int> myVector = {1, 2, 3, 4, 5};
cout << myVector.size() << endl; // 输出5

以上代码输出myVector的长度。

vector的优点及缺点

优点

  1. 可以动态地增加和删除元素,不需要预先知道元素的个数;
  2. 支持随机访问;
  3. 与数组一样,vector使用的是一段连续的内存块,因此可以得到很好的缓存性能;
  4. vector支持STL的所有功能。

缺点

  1. 与数组一样,vector只能存储同一种类型的元素;
  2. 在插入或删除元素时,可能会造成内存的重新分配和拷贝,影响性能。

vector示例

示例1:用vector存储学生成绩

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<double> scores; // 定义存储学生成绩的vector
  double score;

  cout << "请逐个输入学生的成绩,输入负数以结束:" << endl;

  do {
    cout << "输入学生成绩:" << endl;
    cin >> score;

    if (score >= 0) {
      scores.push_back(score); // 将成绩添加到scores里
    }
  } while (score >= 0);

  int count = scores.size(); // 获取vector的长度

  if (count == 0) {
    cout << "没有输入有效的学生成绩!" << endl;
  } else {
    double sum = 0;

    for (int i = 0; i < count; i++) {
      sum += scores[i];
    }

    double avg = sum / count; // 计算平均分
    cout << "学生成绩的平均值为:" << avg << endl;
  }

  return 0;
}

以上代码中,我们定义了一个双精度浮点型的vector对象scores,可以动态地存储输入的学生成绩。当输入负数时,循环结束,统计平均分。

示例2:用vector进行快速排序

#include <iostream>
#include <vector>
using namespace std;

void quickSort(vector<int>& nums, int left, int right) {
  if (left > right) {
    return;
  }

  int pivot = nums[left]; // 以left位置的数为基准
  int i = left, j = right;

  while (i != j) {
    while (nums[j] >= pivot && i < j) {
      j--;
    }

    while (nums[i] <= pivot && i < j) {
      i++;
    }

    if (i < j) {
      swap(nums[i], nums[j]); // 交换nums[i]和nums[j]
    }
  }

  nums[left] = nums[i]; // 将基准数放到正确位置
  nums[i] = pivot;
  quickSort(nums, left, i - 1); // 递归处理左半部分
  quickSort(nums, i + 1, right); // 递归处理右半部分
}

int main() {
  vector<int> nums = {4, 8, 5, 7, 2, 3, 6, 1};
  int count = nums.size();

  quickSort(nums, 0, count - 1); // 对nums进行快速排序

  for (int i = 0; i < count; i++) {
    cout << nums[i] << " ";
  }

  cout << endl;

  return 0;
}

以上代码中,我们使用vector存储待排序的数列,然后调用quickSort()函数对其进行快速排序。在quickSort()函数中,使用了定义在algorithm库中的swap()函数,可以快速交换两个元素的位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ vector数组用法及解析 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • object标签和embed标签

    object标签和embed标签 在HTML中,用于嵌入外部资源(如图片、音频、视频等)的标签有多种,其中比较常用的是<object>和<embed>标签。在本文中,我们将分别介绍这两个标签的使用方法和特性,以及它们之间的区别和优缺点。 基本用法 object标签 <object>标签是HTML中用于嵌入外部资源的标准标签…

    其他 2023年3月28日
    00
  • QT6中QTextcodec头文件找不到的解决方法

    当我们在使用QT6进行开发时,有时候会出现“QTextcodec头文件找不到”的错误提示,这是因为QT6中已经不再支持QTextcodec。在这种情况下,我们可以采用以下两种方法来解决这个问题: 方法一:使用QTextCodec替代QTextcodec QTextcodec在QT6中已经被弃用,取而代之的是QTextCodec(注意大小写)。因此,我们可以通…

    other 2023年6月27日
    00
  • 详解Vue-router嵌套路由

    详解Vue-router嵌套路由攻略 Vue-router是Vue.js官方提供的路由管理器,它可以帮助我们在Vue应用中实现页面之间的导航和路由功能。嵌套路由是Vue-router的一个重要特性,它允许我们在一个路由下再嵌套多个子路由,从而实现更复杂的页面结构和导航逻辑。 1. 安装和配置Vue-router 首先,我们需要安装Vue-router。可以使…

    other 2023年7月28日
    00
  • Office快捷键汇总 Word、Excel、PowerPoint快捷键大全

    “Office快捷键汇总 Word、Excel、PowerPoint快捷键大全”是一篇针对Microsoft Office系列软件的快捷键使用攻略,主要包括Word、Excel和PowerPoint三款软件的快捷键操作介绍和使用技巧。本攻略旨在帮助用户提高办公效率、简化操作步骤,加快完成工作的速度。 Word快捷键汇总 常用快捷键 以下是Word中常用的快捷…

    other 2023年6月27日
    00
  • js中的this关键字详解

    JS中的this关键字详解 什么是this 在Javascript中,this是一个关键字,指当前函数的运行环境,在不同的情况下代表的含义也有所不同。它的值在运行时被自动绑定,通常用于对象方法中。 this的指向 下面是this的常见指向: 全局作用域下的this 当在全局作用域下使用this时,它会指向window对象。 console.log(this)…

    other 2023年6月26日
    00
  • Golang应用程序性能优化技巧分享

    Golang应用程序性能优化技巧分享 本文将详细介绍如何对 Golang 应用程序进行性能优化,以提高应用程序的性能和效率。本攻略将介绍以下步骤: 分析应用程序性能问题 使用性能分析工具优化应用程序 实践优化技巧和实例 分析应用程序性能问题 分析应用程序的性能问题非常重要,我们需要找到导致应用程序性能瓶颈的因素。我们可以使用一些工具和技术来获取应用程序的性能…

    other 2023年6月25日
    00
  • WPF学习09:数据绑定之 Binding to List Data

    WPF学习09:数据绑定之 Binding to List Data的完整攻略 本文将为您提供WPF学习09:数据绑定之 Binding to List Data的完整攻略,包括介绍、使用方法和两个示例说明。 介绍 WPF是一种基于XAML的用户界面框架,可以用于创建Windows应用程序。数据绑定是WPF中的一个重要特性,可以将数据与UI元素进行绑定,实现…

    other 2023年5月6日
    00
  • androidwi-fidisplay(miracast)介绍

    Android Wi-Fi Display(Miracast)介绍 Android Wi-Fi Display,也称为Miracast,是一种通过Wi-Fi Direct技术无线传输视频和音频的标准。它允许您将Android设备的屏幕投射到同样支持Miracast的接收器上,例如电视或显示器。在这篇文章中,我们将介绍Miracast的工作原理,以及如何使用它…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部