C++(STL库)之顺序容器vector的使用

C++(STL库)之顺序容器vector的使用

什么是vector

vector是C++ STL中的一种顺序容器,由于其高效的随机存储和动态调整大小的特点,使用非常广泛。vector容器存放的是一个数组,它允许高效的在尾部插入和删除元素,并支持在序列运行时动态调整容量大小,在操作上与原生数组相似但更加方便且更加安全。

vector基本操作

向vector中插入数据

向vector中插入数据可以使用push_back方法,在vector末尾插入一个元素,例如:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);

    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }
    return 0;
}

输出结果为: 1 2 3 4

遍历vector

遍历vector可以使用for循环结合下标来访问和修改vector中的元素,例如:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec;
    for (int i = 0; i < 10; i++) {
        vec.push_back(i);
    }

    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }

    return 0;
}

输出结果为:0 1 2 3 4 5 6 7 8 9

插入和删除vector元素

在vector中,可以使用insert方法在指定的位置插入一个元素,例如:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);

    auto it = vec.begin() + 2;
    vec.insert(it, 4);

    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }

    return 0;
}

输出结果为:1 2 4 3

在vector中,还可以使用erase方法删除元素,例如:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec;
    for (int i = 0; i < 10; i++) {
        vec.push_back(i);
    }

    auto it = vec.begin() + 5;
    vec.erase(it);

    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }

    return 0;
}

输出结果为:0 1 2 3 4 6 7 8 9

示例说明

示例一:用vector实现快速排序

快速排序是一种常用的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再按此方法对这两部分记录分别进行快速排序,整个排序过程可以递归进行,以此达到整个序列有序的目的。

使用vector可以方便地实现快速排序,代码如下:

#include <iostream>
#include <vector>

using namespace std;

void quick_sort(vector<int>& vec, int left, int right) {
    if (left >= right) {
        return;
    }

    int pivot = left;
    int i = left + 1;
    int j = right;

    while (i <= j) {
        if (vec[i] > vec[pivot] && vec[j] < vec[pivot]) {
            swap(vec[i], vec[j]);
            i++;
            j--;
        }
        if (vec[i] <= vec[pivot]) {
            i++;
        }
        if (vec[j] >= vec[pivot]) {
            j--;
        }
    }
    swap(vec[j], vec[pivot]);
    quick_sort(vec, left, j - 1);
    quick_sort(vec, j + 1, right);
}

int main() {
    vector<int> vec{3, 4, 2, 1, 6, 5, 7, 9, 8};
    quick_sort(vec, 0, vec.size() - 1);
    for (auto i : vec) {
        cout << i << " ";
    }
    return 0;
}

输出结果为:1 2 3 4 5 6 7 8 9

示例二:利用vector实现图的邻接表表示

在图的算法中,邻接表常用来表示有向图或无向图,并且实现简单、使用方便。在邻接表中,每个元素都是一个vector(即表),表示从某一个节点出发,所能到达的节点列表。例如下面的图,用邻接表表示如下:

graph LR
    1 -- 4
    1 -- 2
    2 -- 5
    2 -- 3
    3 -- 6
#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<vector<int>> graph = {{4, 2},
                                 {5, 3},
                                 {6},
                                 {},
                                 {},
                                 {}};

    for (int i = 0; i < graph.size(); i++) {
        cout << i << "->";
        for (auto j : graph[i]) {
            cout << j << " ";
        }
        cout << endl;
    }
    return 0;
}

输出结果为:

0->4 2 
1->5 3 
2->6 
3->
4->
5->

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++(STL库)之顺序容器vector的使用 - Python技术站

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

相关文章

  • 区块链钱包从入门到精通

    区块链钱包从入门到精通攻略 1. 了解区块链钱包的基本概念 区块链钱包是一种数字钱包,用于存储、管理和交换加密货币。在开始学习区块链钱包之前,需要了解以下基本概念: 私钥(Private Key):私钥是区块链钱包的核心组成部分,它是一个由随机生成的字符串组成的密钥。私钥用于对加密货币进行签名和解密操作。 公钥(Public Key):公钥是由私钥生成的,用…

    other 2023年8月4日
    00
  • Windows 环境变量编辑器使用步骤

    当我们需要使用多个不同的应用程序或脚本时,我们可能会遇到环境变量的问题。环境变量是一种特殊的变量,它们用于存储在操作系统中可用的值,例如文件路径或者一些配置信息。如果我们在 Windows 系统下需要编辑环境变量,可以使用“环境变量编辑器”。 下面,我们将为您提供详细的 Windows 环境变量编辑器使用步骤: 步骤1:打开环境变量编辑器 首先,我们需要打开…

    other 2023年6月27日
    00
  • Android UI设计系列之自定义DrawView组件实现数字签名效果(5)

    首先,需要明确这篇文章的主要内容为如何通过自定义DrawView组件实现数字签名效果。为了实现这个目的,需要遵循以下步骤: 首先,在xml布局文件中创建DrawView组件,并设置其大小等参数。 <com.example.drawviewdemo.DrawView android:id="@+id/draw_view" androi…

    other 2023年6月25日
    00
  • 驱动出现加载失败的解决方法

    驱动出现加载失败的解决方法 驱动加载失败可能会导致硬件无法使用,造成操作系统稳定性问题。本篇攻略将为您介绍驱动出现加载失败时的解决方法。 检查驱动是否正常 首先,您需要检查驱动是否正常。您可以通过如下方法检查: 打开设备管理器。 搜索出现问题的设备。 右键点击设备,选择“属性”。 在“驱动程序”选项卡下,选择“驱动程序详细信息”。 检查inf文件以确定是否存…

    other 2023年6月25日
    00
  • JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】

    JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】 DOM(Document Object Model)树是前端开发中非常重要的概念,我们通常都需要对DOM树进行遍历和操作,而JavaScript是我们常用的语言之一,我们可以使用JavaScript来实现DOM树的遍历和操作。本文将详细讲解JavaScript实现的DOM树遍历方法…

    other 2023年6月27日
    00
  • 纯C语言:递归最大数源码分享

    请听我为您详细讲解“纯C语言:递归最大数源码分享”的完整攻略。 攻略概述 本攻略主要分享如何使用纯C语言实现递归查找数组中的最大数,并分享一份源码,方便开发者学习和使用。 攻略内容如下: 确定问题 设计算法 实现源码 编译运行 示例说明 确定问题 本次攻略的目标是查找数组中的最大数,问题描述如下: 输入一个包含 n 个元素的整数数组,请找出其中最大的元素。 …

    other 2023年6月27日
    00
  • win11开机无法登陆反复重启怎么办 ?win11开机无法登陆反复重启解决方法

    针对“win11开机无法登陆反复重启”的问题,有以下几种解决方法。 方法1:重置系统 如果出现开机无法登陆的情况,我们可以尝试通过系统重置来解决问题。具体步骤如下: 进入Windows 11开机界面,点按“电源按钮”,并立即按住“Shift”键。这样会进入Windows的高级启动选项。 在高级启动选项界面,选择“疑难解答”> “重置此PC”> “…

    other 2023年6月26日
    00
  • Python基于socket实现TCP客户端和服务端

    以下是“Python基于socket实现TCP客户端和服务端”的完整攻略: 什么是Socket以及TCP/IP协议? Socket:Socket是通信两端建立连接所用的一个对象,可以用来发送和接收数据。 TCP/IP协议:TCP/IP协议是Internet网络协议的基础,它定义了数据如何从一个计算机传输到另一个计算机,并规定了各种服务的标准规范。 Pytho…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部