c++ vector(向量)使用方法详解(顺序访问vector的多种方式)

yizhihongxing

C++ vector(向量)使用方法详解

简介

vector 是 C++ STL 中的一个重要数据结构,用于实现动态数组。它具有许多优点,包括支持尾部插入、常量时间访问、动态分配内存等。

基本操作

创建 vector

创建一个空的 vector 和一个具有初始值的 vector 的方式如下:

#include <vector>
using namespace std;

int main() {
    // 创建一个空的 vector
    vector<int> vec1;

    // 创建一个具有初始值的 vector
    vector<int> vec2 {1, 2, 3, 4, 5};

    // 或者
    vector<int> vec3 = {1, 2, 3, 4, 5};

    return 0;
}

访问 vector

vector 可以通过下标或迭代器访问,如下所示:

vector<int> vec {1, 2, 3, 4, 5};

// 使用下标访问
int x = vec[0];

// 使用迭代器访问
for (auto it = vec.begin(); it != vec.end(); ++it) {
    cout << *it << endl;
}

往 vector 中添加元素

vector 可以使用 push_back() 添加元素,也可以使用 insert() 在任意位置插入元素,如下所示:

vector<int> vec {1, 2, 3, 4, 5};

// 在尾部插入一个元素
vec.push_back(6);

// 在任意位置插入元素
vec.insert(vec.begin() + 2, 10);

// 在任意位置插入多个元素
vec.insert(vec.begin() + 3, {7, 8, 9});

从 vector 中删除元素

vector 可以使用 pop_back() 删除尾部元素,也可以使用 erase() 删除任意位置的元素,如下所示:

vector<int> vec {1, 2, 3, 4, 5};

// 删除尾部元素
vec.pop_back();

// 删除任意位置元素
vec.erase(vec.begin() + 2);

// 删除任意位置多个元素
vec.erase(vec.begin() + 1, vec.begin() + 3);

顺序访问 vector 的多种方式

使用下标遍历

如前面的示例所示,vector 可以使用下标访问,因此可以使用 for 循环遍历:

vector<int> vec {1, 2, 3, 4, 5};

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

遍历时修改元素

使用范围 for 循环遍历时,可以使用引用修改 vector 中的元素:

vector<int> vec {1, 2, 3, 4, 5};

for (int& x : vec) {
    x = x * x;
}

使用迭代器遍历

使用迭代器遍历,可以使用 while 循环或 for 循环:

vector<int> vec {1, 2, 3, 4, 5};

// 使用 while 循环
auto it = vec.begin();
while (it != vec.end()) {
    cout << *it << endl;
    ++it;
}

// 使用 for 循环
for (auto it = vec.begin(); it != vec.end(); ++it) {
    cout << *it << endl;
}

使用 std::for_each() 遍历

std::for_each() 是一个 STL 算法,可以将指定的函数应用于 vector 的每个元素:

vector<int> vec {1, 2, 3, 4, 5};

// 定义一个用于输出元素的函数
void print(int x) {
    cout << x << endl;
}

// 使用 std::for_each() 遍历
for_each(vec.begin(), vec.end(), print);

示例

示例 1:使用 vector 存储字符串

下面是一个示例,使用 vector 存储字符串,并使用迭代器遍历:

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

int main() {
    vector<string> v;

    // 添加元素
    v.push_back("Hello");
    v.push_back("World");

    // 使用迭代器遍历
    for (auto it = v.begin(); it != v.end(); ++it) {
        cout << *it << endl;
    }

    return 0;
}

输出:

Hello
World

示例 2:使用 vector 实现向量加法

下面是一个示例,使用 vector 实现两个向量之间的加法,并使用范围 for 循环遍历:

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

vector<int> add(vector<int>& v1, vector<int>& v2) {
    vector<int> result(v1.size());

    for (int i = 0; i < v1.size(); ++i) {
        result[i] = v1[i] + v2[i];
    }

    return result;
}

int main() {
    vector<int> v1 {1, 2, 3, 4, 5};
    vector<int> v2 {6, 7, 8, 9, 10};

    // 计算向量和
    vector<int> v = add(v1, v2);

    // 使用范围 for 循环遍历
    for (int x : v) {
        cout << x << " ";
    }
    cout << endl;

    return 0;
}

输出:

7 9 11 13 15

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++ vector(向量)使用方法详解(顺序访问vector的多种方式) - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++ OpenMP简单介绍

    C++ OpenMP简单介绍 什么是OpenMP? OpenMP是一种可以实现线程并行的编程模型。它使用C/C++/Fortran这样的语言来编写程序,而不需要使用任何特定的库或API。OpenMP旨在提高程序的并行性,从而提高应用程序的性能。 如何使用OpenMP? 在C++中,OpenMP使用“pragma”来指定并行计算。这个指令告诉编译器何时开始并行…

    C 2023年5月23日
    00
  • VS2015怎么解决scanf函数的C4996错误?

    当使用VS2015进行C\C++编程时,scanf函数会报C4996错误,这是由于scanf函数被认为是不安全的函数而导致的。要解决这个问题,我们需要用安全的scanf_s函数,以下是解决方案的详细步骤。 Step 1: 打开VS2015编译器 Step 2: 新建一个C或C++项目 Step 3: 在代码中,找到scanf函数的相应位置 示例1: #inc…

    C 2023年5月23日
    00
  • android解析JSON数据

    Android解析JSON数据的完整攻略包括以下几个步骤: 1. 引入JSON库 Android提供了许多JSON库,例如GSON和Jackson等等。引入这些库需要在build.gradle文件中添加相应的依赖项,例如在build.gradle (Module:app)文件中添加以下代码: dependencies { // GSON库 implement…

    C 2023年5月23日
    00
  • win10系统激活失败提示错误代码0xc004f074的故障原因及解决方法

    win10系统激活失败提示错误代码0xc004f074的故障原因及解决方法 当用户在升级或重新安装Windows 10操作系统时,可能会遇到系统激活失败的问题,并显示错误代码0xc004f074,这个错误代码表示激活密钥无法验证。以下是可能导致这个问题的原因和解决方法。 原因 无法连接到激活服务器:如果无法连接到激活服务器,那么激活失败的问题就会发生。可能是…

    C 2023年5月23日
    00
  • C语言中打印特殊图案的实现代码

    下面是详细讲解“C语言中打印特殊图案的实现代码”的完整攻略。 1. 基本概念 在C语言中,我们可以通过使用转义字符来实现打印特殊字符或图案的功能。转义字符是以反斜杠(\)开头的一种特殊字符,它们表示某些无法输入的字符,如换行符、制表符、回车符等。 2. 实现代码 2.1 示例一:打印三角形 以下代码可以打印一个由星号组成的三角形,可以通过连续打印多行来实现。…

    C 2023年5月24日
    00
  • 浅谈JSON中stringify 函数、toJosn函数和parse函数

    JSON 是一种文本格式,主要用来作为前后端数据交互的标准格式。在使用 JSON 的时候,经常需要使用 JSON 的三个核心函数:JSON.stringify()、JSON.parse()、toJSON(),这三个函数分别用于将 JavaScript 数据转换为 JSON 字符串或者反向转换,或自定义数据格式。 JSON.stringify() JSON.s…

    C 2023年5月23日
    00
  • C++ STL中五个常用算法使用教程及实例讲解

    C++ STL中五个常用算法使用教程及实例讲解 作为C++语言的标准库之一,STL(Standard Template Library)提供了很多有用的容器和算法,让C++开发者更加高效地编写程序。本文将介绍STL中的五个常用算法,包括排序、查找、遍历、求和和去重,并以实例的形式展示具体使用方法。 排序算法 STL中提供了两个常用的排序算法,即sort和st…

    C 2023年5月22日
    00
  • C#中的char、string和StringBuilder的使用详解

    C#中的char、string和StringBuilder的使用详解 在C#中,char、string和StringBuilder都是用来表示字符串以及相关操作的工具。本文将详细讲解它们的使用方法及不同点。 Char Char是一个表示单个Unicode字符的数据类型。在C#中,它通常用于对单个字符进行操作。以下是一些对Char变量进行操作的示例: char…

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