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

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++实现简单迷宫游戏

    C++实现简单迷宫游戏攻略 介绍 迷宫游戏是一种很有趣的益智游戏,在这个游戏中,玩家需要解决迷宫中的难题,找到通往出口的路线。本攻略将提供一个简单的迷宫游戏实现过程,使用 C++ 编程语言实现。 在这个项目中,我们将学习如何使用类、条件语句、循环和数组等 C++ 编程语言的基本语法和概念。在游戏中,我们将使用控制台窗口来创建一个命令行界面,玩家可以通过键盘操…

    C 2023年5月23日
    00
  • c++动态规划经典算法

    c++动态规划经典算法攻略 什么是动态规划 动态规划(Dynamic Programming,DP)是一种解决多阶段决策问题的优化算法,其本质是将原问题分解为若干个子问题,同时记录下每个子问题的最优解,以便于后续利用。 动态规划通常由三个步骤构成: 定义状态,即确定子问题的规模和状态表示; 状态转移,即确定子问题之间的转移关系,从而将问题规模缩小; 确定边界…

    C 2023年5月22日
    00
  • C++学习之算术运算符使用详解

    C++学习之算术运算符使用详解 在C++语言中,算术运算符是一组用于执行算术运算(如加减乘除)的运算符。在本篇文章中,我们将进行深入的讨论和示范 C++ 中常用的算术运算符。本文主要包括以下内容: 算术运算符概述 算术运算符优先级 算术运算符使用示例 算术运算符概述 C++ 中的算术运算符如下表所示: 运算符 描述 + 加法 – 减法 * 乘法 / 除法 %…

    C 2023年5月23日
    00
  • 详解php与ethereum客户端交互

    详解php与ethereum客户端交互 概述 Ethereum是一种基于区块链的分布式应用程序平台,它提供了以太币(Ether)作为加密数字货币的基础,并允许在以太坊上构建智能合约。 PHP是一种流行的Web编程语言,通常用于构建Web应用程序。 本文将介绍如何使用PHP与Ethereum客户端进行交互,以便于实现以太坊智能合约的部署和调用。 安装 在PHP…

    C 2023年5月23日
    00
  • 0到1分析美团端侧cdn容灾解决方案

    0到1分析美团端侧CDN容灾解决方案攻略 背景介绍 在互联网行业,容灾解决方案非常重要。当系统出现故障时,为了保证用户体验,需要用容灾方案来解决和恢复服务。CDN是一种常见的解决方案,可以加速资源访问并分担服务压力。本文将详细介绍美团端侧CDN的容灾解决方案。 容灾解决方案 美团端侧CDN容灾解决方案主要分为以下几个部分: 1. 备用域名解析 美团会为CDN…

    C 2023年5月23日
    00
  • C语言中const,volatile,restrict的用法总结

    《C语言中const,volatile,restrict的用法总结》 const关键字 const关键字被用于限定一个变量的值不可被修改。它可以作为函数返回类型、形参类型、函数的局部变量类型以及全局变量类型来使用。 const修饰指针类型 使用const修饰指针类型可以实现对指针所指对象的只读访问,而不是实现对指针本身的只读访问。语法格式如下: const …

    C 2023年5月22日
    00
  • C++深入讲解对象的销毁之析构函数

    C++深入讲解对象的销毁之析构函数 什么是析构函数 在C++中,每个类都有一个析构函数。析构函数的作用是在对象被销毁时完成一些清理工作。 C++中的析构函数的命名规则为:在类名前加一个波浪线(~)构成一个特殊的函数名。例如,如果类名为MyClass,则析构函数的函数名应该为~MyClass()。 析构函数不需要任何参数,也不能重载。只能声明一个析构函数,因为…

    C 2023年5月22日
    00
  • C++如何动态的生成对象详解

    C++如何动态的生成对象详解 在 C++ 中我们可以使用 new 关键字来动态的生成一个对象,然而有时候我们需要在程序运行时根据一些特定条件创建一组对象,这时候就需要用到动态生成对象的方法。 1. 动态生成对象的基本方法 在 C++ 中,我们可以通过调用构造函数来创建一个对象,因此我们也可以通过在内存中创建对象的方式来动态生成对象。 首先需要使用 void*…

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