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

yizhihongxing

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日

相关文章

  • gulp安装和使用简介

    以下是Gulp安装和使用简介的完整攻略,包括两个示例说明。 1. Gulp简介 Gulp是一个基于Node.js的自动化构建工具,可以帮助开发者自动化执行常见的开发任务,例如编译Sass、压缩JavaScript、优化图像等。Gulp使用简单、灵活,可以大大提高开发效率。 2. Gulp安装 以下是在Linux系统中安装Gulp的步骤: 安装Node.js:…

    other 2023年5月9日
    00
  • Win7月度更新补丁KB4019264(KB4015552)下载地址(附更新、已知内容汇总)

    Win7月度更新补丁KB4019264(KB4015552)下载地址(附更新、已知内容汇总)攻略 1. 简介 Win7月度更新补丁KB4019264(KB4015552)是针对Windows 7操作系统的重要安全更新补丁。本攻略将详细介绍如何下载该补丁以及提供已知内容的汇总。 2. 下载地址 你可以通过以下步骤下载Win7月度更新补丁KB4019264(KB…

    other 2023年8月4日
    00
  • 怎么修改电脑默认的Administrator账号的名称

    修改电脑默认的Administrator账号的名称可以通过以下步骤进行: 1. 打开计算机管理控制台 首先,我们需要打开计算机管理控制台。可以通过以下两种方法打开: 通过Win+X快捷键打开后选择计算机管理 通过依次点击“开始菜单 – Windows系统 – 控制面板 – 管理工具 – 计算机管理”打开 2. 找到本地用户和组 在计算机管理控制台中,我们需要…

    other 2023年6月27日
    00
  • 公众号ip地址在哪找? 查看微信公众号ip地址的技巧

    公众号IP地址在哪找?查看微信公众号IP地址的技巧攻略 微信公众号的IP地址是指公众号服务器的IP地址,用于与微信服务器进行通信。了解公众号的IP地址可以帮助我们进行一些网络相关的操作,比如设置域名解析、配置防火墙等。下面是查看微信公众号IP地址的技巧攻略: 1. 登录微信公众平台 首先,我们需要登录微信公众平台,以便获取公众号的相关信息。请按照以下步骤进行…

    other 2023年7月31日
    00
  • 详解Go语言中单链表的使用

    详解Go语言中单链表的使用 什么是单链表 单链表(Singly Linked List)是一种常见的数据结构之一,它由一串节点组成,每个节点包含两个部分:数据部分和指向下一个节点的指针部分。 单链表的头部节点称为头节点,尾部节点称为尾节点。尾节点的指针部分指向NULL。 Go语言中单链表的实现 在Go语言中实现单链表,我们可以定义一个结构体表示链表节点,代码…

    other 2023年6月27日
    00
  • vue创建组件的两种方法小结(必看)

    Vue.js是一种流行的JavaScript框架,用于构建交互式Web应用程序。在Vue.js中,组件是构建应用程序的基本构建块之一。本文将介绍Vue中创建组件的两种方法。 方法1:使用Vue.component()方法创建全局组件 Vue.component()方法是Vue.js中创建全局组件的一种方法。以下是使用Vue.component()方法创建组件…

    other 2023年5月9日
    00
  • 关于reactjs:何时使用react的“componentdidupdate”方法

    以下是关于“关于ReactJS:何时使用React的“componentDidUpdate”方法”的完整攻略,包含两个示例。 关于ReactJS:何时使用的“componentUpdate”方法 React是一个流行的JavaScript库,用于构建用户界面。在React中,我们可以使用“componentDidUpdate”方法处理组更新后的操作。以下是关…

    other 2023年5月9日
    00
  • ubuntu18.04安装frp的配置说明

    Ubuntu 18.04安装frp的配置说明 frp是一种高性能的反向代理工具,可以帮助我们将内网服务暴露到公网上。本攻略将介如何在Ubuntu 18.04上安装frp,并提供两个示例。 安装frp 以下是在Ubuntu 18.04上安frp的步骤: 下载frp。可以从frp的官方网站下载最新版本的frp,命令如下: wget https://github.…

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