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日

相关文章

  • Go导入不同目录下包报错的解决方法

    Go导入不同目录下包报错的解决方法 在Go语言中,当我们在一个包中导入另一个不同目录下的包时,有时会遇到导入报错的情况。这可能是由于包的路径设置不正确或GOPATH环境变量配置错误导致的。下面是解决这个问题的两种常见方法: 方法一:使用绝对路径导入包 如果你的项目中的包位于不同的目录下,你可以使用绝对路径来导入包。例如,假设你的项目结构如下: – proje…

    other 2023年10月13日
    00
  • delphixe2之firemonkey入门(40)-控件基础:tmemo

    以下是Delphi XE2之FireMonkey入门(40)-控件基础:TMemo的攻略: 步骤1:了解TMemo控件 TMemo控件是FireMonkey框架的一个多行文本框控件,可以用于显示和编辑多行文本。TMemo控件支持多种文本格式和字体样式,可以通过代码或属性面板进行设置。 步骤2:创建TMemo控件 以下是创建TMemo控件的示例: 在FireM…

    other 2023年5月6日
    00
  • C语言单链表实现多项式相加

    下面是关于C语言单链表实现多项式相加的完整攻略。 一、单链表实现多项式的存储 多项式是由若干项组成的,每一项有系数和指数两部分构成。为了在计算机中表示多项式,我们可以采用单链表来存储。假设一个多项式为: $$P(x) = 3x^4 + 2x^3 + x^2 – 5$$ 那么我们可以采用下面的结构体来表示一个多项式中的一项: typedef struct no…

    other 2023年6月27日
    00
  • ssm框架下web项目,web.xml配置文件的作用(详解)

    在SSM框架下,web.xml配置文件是一个非常重要的文件。它用于配置Servlet和Filter等组件,同时也可以配置一些全局的参数和监听器等。下面详细讲解web.xml配置文件的作用: 1. Servlet和Filter配置 在web.xml文件中,我们可以定义Servlet和Filter等组件。使用Servlet组件可以实现简单的数据响应和页面跳转,使…

    other 2023年6月25日
    00
  • Linux下搭建HTTP服务器完成图片显示功能

    下面是在Linux下搭建HTTP服务器完成图片显示的完整攻略。 步骤一:安装HTTP服务器 在Linux系统中,常用的HTTP服务器有Apache、Nginx等,在此我们以安装Apache为例。 打开终端,输入以下命令安装Apache: sudo apt-get update sudo apt-get install apache2 安装完成后,输入以下命令…

    other 2023年6月27日
    00
  • 小飞文件恢复工具如何安装?小飞文件恢复工具安装使用教程

    小飞文件恢复工具是一款可以帮助用户恢复误删、格式化等各种意外情况下的文件的工具。以下是小飞文件恢复工具的安装和使用教程。 安装小飞文件恢复工具 下载小飞文件恢复工具的安装包,可从官网(http://www.xf-file.com/)上下载。 双击运行安装包,并选择安装路径。 在安装过程中跟随安装向导进行操作即可。 使用小飞文件恢复工具 恢复文件 打开小飞文件…

    other 2023年6月25日
    00
  • bios密码忘记了怎么办?BIOS密码破解清除方法详解

    当忘记BIOS密码时,我们可以尝试以下方法进行破解和清除,具体操作步骤如下: 1. 使用开放式BIOS密码: 一些BIOS制造商将跨越许多主板的通用密码编码在BIOS中。 这些密码被充当开放式密码,并且是一个通用的备用选项。 常见的开放式密码包括“AMI”,“AAAMMMIII”,“AMI?SW”和“BIOS”。 示例一: 假设您正在使用AMI BIOS,则…

    other 2023年6月26日
    00
  • Android开发之高德地图实现定位

    Android开发之高德地图实现定位攻略 简介 本攻略将详细介绍如何在Android应用中使用高德地图实现定位功能。高德地图是一款功能强大的地图服务,提供了准确的定位功能,可以帮助开发者快速实现定位功能。 步骤 步骤一:添加依赖库 首先,在你的Android项目中添加高德地图的依赖库。在项目的build.gradle文件中添加以下代码: dependenci…

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