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

C++ vector 容器

C++ vector 容器

概述

vector 是 C++ 标准模板库(STL)中的一个重要组成部分,它提供了一种动态数组的数据结构。vector 容器能够根据需要自动调整其大小,这使得它在管理数据集合时非常灵活和高效。在 C++ 中,vector 通常用于存储一系列元素,这些元素可以是基本数据类型(如 int、double 等),也可以是复杂的数据结构(如自定义类)。

基本操作

创建 vector

创建 vector 的基本方式是通过包含 <vector> 头文件,并使用 std::vector 命名空间。例如,创建一个整数类型的 vector 可以如下进行:

#include <vector>

std::vector<int> myVector;

添加元素

vector 提供了多种添加元素的方法,包括 push_back(),它可以在容器的末尾添加一个新元素:

myVector.push_back(10);
myVector.push_back(20);

访问元素

可以通过下标运算符 [] 访问 vector 中的元素,如下所示:

int firstElement = myVector[0]; // 访问第一个元素
int secondElement = myVector[1]; // 访问第二个元素

修改元素

可以直接通过下标修改 vector 中的元素:

myVector[0] = 100; // 修改第一个元素

删除元素

可以使用 pop_back() 方法删除 vector 末尾的元素:

myVector.pop_back(); // 删除最后一个元素

遍历 vector

可以使用范围基础的 for 循环或传统的 for 循环遍历 vector

// 范围基础的 for 循环
for (int element : myVector) {
    std::cout << element << std::endl;
}

// 传统 for 循环
for (size_t i = 0; i < myVector.size(); ++i) {
    std::cout << myVector[i] << std::endl;
}

vector 的大小

vector 的大小可以通过 size() 方法获取:

size_t vectorSize = myVector.size(); // 获取 vector 的大小

vector 的容量

vector 的容量可以通过 capacity() 方法获取,它表示在不重新分配内存的情况下,vector 可以容纳的元素数量:

size_t vectorCapacity = myVector.capacity(); // 获取 vector 的容量

高级特性

###reserve() 方法

reserve() 方法可以用来预先分配 vector 的内存,以优化性能。这在已知 vector 将要存储大量元素时特别有用:

myVector.reserve(1000); // 预先分配 1000 个元素的内存

vector 的内存管理

vector 的内存管理是自动的。当 vector 的大小超过其容量时,vector 会自动重新分配内存并复制现有元素到新的内存位置。这个过程可能会导致性能开销,因此在使用 vector 时,合理地预分配内存是非常重要的。

vector 的效率

vector 在末尾添加和删除元素通常是非常高效的,因为这些操作通常不需要移动其他元素。然而,在 vector 的开始或中间插入或删除元素可能会导致大量的元素移动,从而降低效率。

结论

vector 是 C++ 中一个强大且灵活的数据结构,适用于大多数需要动态数组的情况。通过了解其基本操作和高级特性,开发者可以更有效地使用 vector 来管理数据集合。


http://www.kler.cn/a/394338.html

相关文章:

  • 谷歌Gemini与Anthropic Claude对比测试引发争议:AI竞赛暗流涌动
  • 各种网站(学习资源及其他)
  • GIT与github的链接(同步本地与远程仓库)
  • clickhouse复现修复 结构需要清理 错误 structure need clean
  • acme ssl证书自动续签 nginx
  • Java文字识别OCR API-手写文字识别-生僻字识别-应用场景
  • 推荐一款完全开源的多端仓库管理系统
  • 计算机视觉空域处理完整版——超详细图文解
  • Docker安装部署RabbitMQ
  • Android12的ANR解析
  • 防爆增安型电机与防爆无火花型电机的区别
  • Agent熔断:助力构建更健壮的IT监控系统
  • 【代码随想录】刷题记录(29)-用栈实现队列
  • Web性能优化:从基础到高级
  • 引入了JUnit框架 却报错找不到:java.lang.ClassNotFoundException
  • 爬虫如何解决短效代理被封的问题?
  • 基于Spring Boot的电子商务系统设计
  • 海外媒体发稿:聚焦摩洛哥世界新闻 Morocco World News
  • 数字图像处理(c++ opencv):图像复原与重建-常见的滤波方法--统计排序滤波器
  • 机器学习—模型选择和训练交叉验证测试集
  • 鸿蒙HarmonyOS 网络请求获取数据Http
  • 2024-11-12 问AI: [AI面试题] 您将如何设计一个人工智能系统来预测电信公司的客户流失?
  • SpringBoot-自定义注解,拦截器
  • Prometheus面试内容整理-Exporters
  • docker之容器设置开机自启(4)
  • 力扣 LeetCode 242. 有效的字母异位词(Day3:哈希表)