我是吴艾伦。当我开始学习 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"] <
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。
下一篇 :
构建基于浏览器的平铺海报PDF生成器
分享到:
长按或扫码识别 分享给好友