数据结构:动态数组vector

news/2025/2/23 3:31:26

vector 是 C++ 标准库的动态数组。

在C语言中一般初学者会使用malloc,int[n]等方式来创建静态数组,但是这种方式繁琐且容易出错。我们做算法题一般使用动态数组vector, 并且在刷题网站的题目给的输入一般也是vector类型。

 示例:vector的初始化如下:

#include <vector>

int n = 7, m = 8;

// 初始化一个 int 型的空数组 nums
vector<int> nums;

// 初始化一个大小为 n 的数组 nums,数组中的值默认都为 0
vector<int> nums(n);

// 初始化一个元素为 1, 3, 5 的数组 nums
vector<int> nums{1, 3, 5};

// 初始化一个大小为 n 的数组 nums,其值全都为 2
vector<int> nums(n, 2);

// 初始化一个二维 int 数组 dp
vector<vector<int>> dp;

// 初始化一个大小为 m * n 的布尔数组 dp,
// 其中的值都初始化为 true
vector<vector<bool>> dp(m, vector<bool>(n, true));

vector的操作示例:

 

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

int main() {
    int n = 10;
    // 数组大小为 10,元素值都为 0
    vector<int> nums(n);
    
    cout << nums.empty() << endl;  // 输出 0 (false)
    
    cout << nums.size() << endl;   // 输出:10

    
    nums.push_back(20);   // 在数组尾部插入一个元素 20
   
    cout << nums.size() << endl;  // 输出:11

    

    cout << nums.back() << endl;  // 得到数组最后一个元素的引用     输出:20

    
    nums.pop_back();     // 删除数组的最后一个元素(无返回值)

    cout << nums.size() << endl;     // 输出:10


    nums[0] = 11;        // 可以通过方括号直接取值或修改

    cout << nums[0] << endl;       // 输出:11


    nums.insert(nums.begin() + 3, 99);      // 在索引 3 处插入一个元素 99


    nums.erase(nums.begin() + 2);       // 删除索引 2 处的元素


    swap(nums[0], nums[1]);       // 交换 nums[0] 和 nums[1]

    // 遍历数组
    // 0 11 99 0 0 0 0 0 0 0
    for (int i = 0; i < nums.size(); i++) {
        cout << nums[i] << " ";
    }
    cout << endl;
}

另外,根据数组的特性,利用索引访问元素很高效,从尾部删除元素也是很高效的;但是从中间或者头部删除或增加元素需要数据搬移,很低效。


http://www.niftyadmin.cn/n/5862933.html

相关文章

【GPU驱动】OpenGLES图形管线渲染机制

OpenGLES图形管线渲染机制 OpenGL/ES 的渲染管线也是一个典型的图形流水线&#xff08;Graphics Pipeline&#xff09;&#xff0c;包括多个阶段&#xff0c;每个阶段都负责对图形数据进行处理。管线的核心目标是将图形数据转换为最终的图像&#xff0c;这些图像可以显示在屏幕…

在VSCode中接入deepseek

注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key&#xff0c;呆会vscode要用&#xff0c;不然401. 打开vscod&#xff0c;电脑能上网。下插件。 下好要配置 点它一下。 要配置&#xff0c;全…

关于es6-module的语法

ES6&#xff08;ECMAScript 2015&#xff09;引入了模块化的概念&#xff0c;旨在使 JavaScript 更加模块化、可维护和可重用。ES6 模块允许我们在不同的文件中组织和管理代码&#xff0c;使得不同模块之间的依赖关系更加清晰。 1. 导出&#xff08;Export&#xff09; 1.1 命…

在华为云部署应用,通过阿里云代理调用第三方接口的利弊与解决方案

以下是一篇针对“在华为云上部署应用,通过阿里云代理服务器调用第三方接口”所做的问答与分析整理而成的博文示例,供您发布或分享。内容涵盖了方案现状、主要弊端以及详细的优化与解决思路。 在华为云部署应用,通过阿里云代理调用第三方接口的利弊与解决方案 一、背景介绍 …

SSE/Fetch API+Stream/WebSocket实时流式接收Node后端传来的处理过后的Coze API数据

SSE与Websocket详解,SSE实现对话框流式输出 用户可能在使用Server-Sent Events(SSE)时遇到了困难,特别是在尝试发送POST请求时遇到了限制。我需要确认SSE是否支持POST方法,并解释为什么常见做法是使用GET,同时提供替代方案。 首先,我需要回忆SSE的工作原理。SSE是服务器…

c#编程:定义比较器,ArrayList使用比较器进行排序

ArrayList 是 .NET Framework 1.1 引入的一个非泛型集合类型&#xff0c;在 C# 现代版本中推荐使用泛型集合如 List 来代替 ArrayList&#xff0c;因为它们提供了更好的类型安全性和性能。 ArrayList 中的元素按照指定顺序进行排序&#xff0c;可以使用 ArrayList.Sort() 方法…

政安晨的AI大模型训练实践 九 - 熟悉LLaMA Factory的详细参数含义-基本概念理解一下

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 小伙伴铁子们&#xff0c;上手先熟悉起来训练工具的每一个参数&#xff0c;很重要。 参照我…

【Kubernets】Kubernets资源类型Deployment详细介绍

文章目录 Kubernets资源概览Kubernetes Deployment 资源类型详细介绍Deployment 的主要功能Deployment 的核心字段字段详解1. **metadata**2. **spec**3. **template**4. **containers**5. **strategy**6. **restartPolicy** Deployment 的生命周期Deployment 的常用操作1. 创建…