跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

STL 专题:vector 变长数组的使用与特性

综述由AI生成C++ STL 中 vector 容器的基本用法,涵盖万能头文件引入、多种创建方式、元素访问与修改、遍历方法及常用操作(判空、清空)。文中包含斐波那契数列练习题及参考代码,展示了 vector 在动态数组场景下的实际应用,适合初学者掌握动态数组特性。

松间照月发布于 2026/3/28更新于 2026/6/232 浏览

推荐引入万能头文件

#include<bits/stdc++.h> // 万能头文件 / 预编译头文件,它的本质是包含了 C++ 标准库中几乎所有常用的头文件(比如输入输出、字符串、容器、算法、数学函数等)

using namespace std; // 使用 std 命名空间,在代码中可以直接使用标准库中的标识符(如函数、类、变量等),无需额外添加 std:: 前缀

Vector

Vector 是变长数组,支持随机访问,不支持在任意位置 O(1) 插入。为了保证效率,元素的增删一般应该在末尾进行。

创建 vector

vector<int> v; // 创建一个空的 vector,元素类型为 int

vector<int> v1(10); // 创建一个含有 10 个元素的 vector,所有元素默认初始化为 0

vector<int> v2(10,42); // 创建一个含有 10 个元素的 vector,所有元素初始化为 42

vector<int> v3 = {1,2,3,4,5}; // 使用列表初始化创建一个 vector (通过大括号 {} 直接列出初始化元素,称为'列表初始化')

vector<int> v[233]; // 相当于第一维长 233,第二维长度变化的 int 数组

struct rec{...};

vector<rec> c; // 自定义的结构体类型也可以保存在 vector 中

访问元素

int x = v[0]; // 访问第一个元素

int y = v.at(1); // 使用 at() 函数访问第二个元素,at() 会进行边界检查(若超出边界,则会抛出异常)

修改元素

v[0] = 10; // 修改第一个元素,O(1)

v.push_back(20); // 在 vector 末尾添加一个元素,O(1)

v.pop_back(); // 删除末尾元素,O(1),请注意保证 vector 非空

遍历 vector

// 下标遍历

// 注意 v.size() 返回值为 unsigned int 类型,不要进行 -1 操作,否则可能会得到一个非常大的数,因为是用补码表示的。

// 不要使用 i <= v.size() - 1

`for(int i=0;i<v.size();i++){

  cout<<v[i]<<' ';

}

cout<<endl;`

// 使用范围 for 循环

// elem 是从 v 中取出来的值

// 优点:方便,缺点:丢失下标信息

`for(int elem:v){

  cout<<elem<<' ';

}

cout<<endl;`

// 如果 vector 存储的是 pair 类型或者结构体,c++17 版本以上可使用结构化绑定来枚举

// &表示引用枚举,不加&则是拷贝枚举

`vector<pair<int,int>> v_pair;

for(const auto &[x,y] : v_pair){

  cout<<x<<' '<<y<<'\n';

}

查询 vector 大小

int size = v.size(); // 返回 vector 中元素的个数

判空

if(v.empty()) // 如果是空,则 v.empty() 会返回一个 true,否则返回 false

if(v.size()) // 如果非空,则 v.size() 返回 1,为空返回 0

清空 vector

v.clear(); // 移除所有元素,size 变为 0,O(n)

练习题

斐波那契数列练习题

文章配图

代码答案

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
    int n;cin>>n;
    vector<ll> v;
    v.push_back(1),v.push_back(1);
    for(int i=3;i<=n;i++){
        v.push_back(*v.rbegin()+*(++v.rbegin()));
    }
    cout<<v.back()<<endl;
    return 0;
}

目录

  1. 推荐引入万能头文件
  2. Vector
  3. 创建 vector
  4. 访问元素
  5. 修改元素
  6. 遍历 vector
  7. 查询 vector 大小
  8. 判空
  9. 清空 vector
  10. 练习题
  11. 代码答案
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Rust WebAssembly 与 Three.js 结合的 3D 数据可视化实战:高性能粒子系统
  • AI 大模型技术原理、应用场景与学习路径详解
  • 前端 SSG:静态站点生成技术与实践
  • GitHub Copilot、Cursor、JetBrains AI Assistant 使用指南
  • mssql1069错误(由于登录失败而无法启动服务)解决方法
  • Spring AI 实战:从零开发 IDEA 插件版 AI 代码助手
  • Java 核心面试题与解析:基础、并发、容器等高频考点
  • 归并排序非递归实现指南
  • 网络安全行业入门指南:岗位方向与学习路径
  • OpenGlass:大模型赋能开源智能眼镜,25 美元实现语音控制与 AR 叠加
  • Python 科学计算核心库 NumPy 详解
  • 基于 OpenClaw 与飞书开放平台实现 AI 新闻推送机器人
  • Java 手写 AI Agent:ZenoAgent 实战笔记
  • 一文吃透SBUS协议:从原理到实战(无人机/航模/机器人适用)
  • 大语言模型(LLM)应用开发流程与实战项目
  • OpenClaw 多飞书机器人与多 Agent 团队协作实践
  • VS Code 中 Python 代码格式化工具选型与配置
  • Java 中的 char、String、StringBuilder 与 StringBuffer 详解
  • 前端拖拽排序实现详解:从原理到实践
  • Linux 管道通信实战:匿名进程池与命名管道服务端模型

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online