当前位置: 首页 > news >正文

C++ 标准库 vector(三十七)

1. vector 的基本概念

  • 容器的概念
    vector 表示一组相同类型对象的集合,每个对象都有一个与之对应的索引,允许使用下标进行随机访问。这种结构也被称为“动态数组”,因为它可以根据需要自动调整大小。

  • 类模板
    vector 是一个类模板。模板是一份描述如何生成类或函数的说明,编译器根据你提供的类型参数实例化出具体的 vector 类型。例如:

    vector<int> ivec;                   // 生成保存 int 类型对象的 vector
    vector<Sales_item> sales_vec;       // 生成保存 Sales_item 类型对象的 vector
    vector<vector<string>> file;        // 生成保存 vector<string> 类型对象的 vector
    

    在上述例子中,编译器根据 vector 模板分别生成了 vector、vector<Sales_item> 和 vector<vector> 三种类型。

  • 模板的实例化
    当你在代码中写下 vector<T> 时,实际上是在告诉编译器:“请根据模板 vector 生成一个专门用于存放 T 类型对象的容器。”这称为模板实例化。需要注意的是,vector 可以容纳绝大多数类型的对象作为其元素,但由于引用不是对象,因此不能有包含引用的 vector。

2. 使用 vector 前的准备

在使用 vector 时,需要包含适当的头文件,并使用 using 声明将其引入当前作用域。常见的准备工作如下:

#include <vector>
using std::vector;

这样,在后续代码中就可以直接使用 vector,而不必每次写 std::vector

3. vector 的使用示例

3.1 定义和初始化 vector 对象

下面展示一些常见的 vector 定义与初始化方法:

#include <vector>
#include <string>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::endl;

int main() {
    // 定义一个保存 int 的 vector,初始为空
    vector<int> ivec;

    // 定义一个保存 string 的 vector,并使用 initializer_list 进行初始化
    vector<string> svec = {"hello", "world", "!"};

    // 定义一个保存 Sales_item 的 vector(假设 Sales_item 已经定义)
    // vector<Sales_item> sales_vec;

    // 定义一个嵌套的 vector:保存 vector<string> 的 vector
    vector<vector<string>> file;

    // 输出 svec 中的每个元素
    for (const auto &s : svec)
        cout << s << " ";
    cout << endl;
    
    return 0;
}

3.2 注意事项

  • 元素类型的要求
    vector 能容纳绝大多数内置类型和类类型,但不能存储引用类型,因为引用不是对象。

  • 嵌套容器
    vector 的元素可以是另一个 vector,这样可以实现二维数组的效果。但需要注意早期 C++ 版本在嵌套模板类型时要求在右尖括号之间加空格,而 C++11 后允许直接写成 vector<vector<int>>

  • 动态大小调整
    vector 会根据元素的插入或删除自动调整大小,因此在使用时无需担心内存的重新分配问题(但需要注意性能影响)。

4. 总结

  • vector 是动态数组容器:
    用于存放一系列相同类型的对象,并提供随机访问功能。

  • vector 是类模板:
    使用时需提供类型参数,编译器根据模板生成具体类型,如 vector<int>vector<string> 等。

  • 使用前准备:
    包含头文件 <vector> 并使用 using std::vector; 可简化代码书写。

  • 注意事项:

    • vector 的元素类型必须是对象(引用不可用)。
    • 嵌套使用时,C++11 后支持直接写成 vector<vector<int>>
    • 模板实例化让 vector 能适用于绝大多数类型,但应注意内存管理和性能问题。

通过对 vector 的理解和使用,你可以更好地管理动态数组,构建灵活且高效的数据结构。希望这篇文章能帮助你全面掌握 vector 的基本概念与实际应用。

参考资料

  • cppreference.com 中关于 std::vector 的详细说明
  • 各大 C++ 编码规范(如 Google C++ Style Guide)中对容器使用的建议

这篇博客示例旨在为你提供一个全面的 vector 使用指南,从基本概念到具体示例再到注意事项,助你在 C++ 开发中更高效地利用这一强大容器。

相关文章:

  • (51单片机)独立按键控制流水灯LED流向(独立按键教程)(LED使用教程)
  • day40——种花问题(LeetCode-605)
  • chromadb 安装和使用
  • Lecture 44: NVIDIA Profiling (未完)
  • 10种电阻综合对比——《器件手册--电阻》
  • CNN-SE-Attention-ITCN多特征输入回归预测(Matlab完整源码和数据)
  • DeepSeek推动办公智能向“人机共智”阶段跃迁
  • centos7 yum install docker 安装错误
  • java面试篇 并发编程篇
  • 低代码开发:重塑软件开发的未来
  • MCP server的stdio和SSE分别是什么?
  • 网络初识 - Java
  • C# Winform 入门(11)之制作酷炫灯光效果
  • DeepSeek 教我 C++ (8) :C++ 静态类型不安全的情况
  • 内网渗透(杂项集合) --- 中的多协议与漏洞利用技术(杂项知识点 重点) 持续更新
  • Three.js 系列专题 3:光照与阴影
  • Spring Data JPA中的List底层:深入解析ArrayList的奥秘!!!
  • linux Gitkraken 破解
  • 基于springboot协同过滤算法的农产品销售推荐系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 多进程/线程访问动态库全局变量的安全性
  • 怎么做一个简易网站/在线生成个人网站
  • 网站建设待遇/广州网站推广服务
  • 网站策划案/社会新闻最新消息
  • 如何使用家里电脑做网站服务器/海淀搜索引擎优化seo
  • 做直播网站的上市公司/网络销售是什么
  • 用htlm做静态网站怎么用/快速收录域名