停止在所有场景中使用数组

发布日期:2026-07-23 10:04:16  浏览量 :0
发布日期:2026-07-23 10:04:16  
0

我是吴艾伦。当我开始学习 C++ 时,对于“我需要存储多个东西”这个问题,我的回答总是数组。int arr[1000]。每次都是如此。

后来我发现了标准模板库容器,意识到自己之前工作得太辛苦了。以下是各种容器的适用场景。

vector(动态数组)——你的新默认选择

如果你过去常常写 int arr[1000],请改用 vector<int> arr。它可以动态增长和收缩,知道自身的大小,并且你可以将其传递给函数,而无需单独传递长度。

// 旧方式
int scores[100];
int n = 0;
scores[n++] = 95;  // 希望 n 不超过 99

// 新方式
vector<int> scores;
scores.push_back(95);  // 永远不会溢出,也无需手动计数

在以下情况使用 vector:你需要一个有序的列表,并且主要是在末尾添加元素或通过索引访问元素。

在以下情况不要使用 vector:你需要频繁地在中间插入或删除元素。那是 O(n) 复杂度——后面的每个元素都需要移动。

map(映射)——当你需要通过名称查找内容时

数组和 vector 使用整数索引。如果你想通过学生的姓名而不是编号来查找分数,该怎么办?

map<string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 88;

cout << scores["Alice"];  // 95

在底层,map 是一棵平衡二叉搜索树。查找复杂度是 O(log n),而不是 O(1)。但对于大多数情况来说,它足够快,而且代码极其简单。

在以下情况使用 map:你拥有键值对,且键不仅仅是 0、1、2、3...

在以下情况不要使用 map:你只需要整数索引——那是 vector 的用途。或者当你需要平均 O(1) 的查找速度时——请使用 unordered_map

unordered_map(无序映射)——同样的功能,但更快(通常)

unordered_map<string, int> scores;
scores["Alice"] <

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据