别再用vector<bool>了!Google高级工程师:这大概是STL最大的设计失误 ...

打印 上一主题 下一主题

主题 933|帖子 933|积分 2799

各人好,我是小康。本日我们来聊一个藏在C++标准库中的"定时炸弹",它看起来人畜无害,但却坑了无数C++步调员。
前言:当你以为本身用的是vector,结果却不是

嘿,各位码农兄弟姐妹们!本日咱们来聊一个你大概每天都在用,但是却从来没注意过的C++小怪兽:vector。
前几天,我在帮同事调一个莫名奥妙的bug,看到他代码里用了一堆vector来存储状态标志。我随口问了一句:"你知道这玩意儿不是真正的 vector 吗?"
他一脸懵逼:"啥?不大概吧?名字明明白白写着 vector 啊!"
就是这样,在C++的世界里,vector其实是个披着vector外衣的奇葩东西!据说在Google内部的一次技能分享中,一位高级工程师直言不讳地称它为"STL中最大的设计失误之一"。这不是我瞎编的,在C++标准委员会的多份提案文件中,也多次讨论过这个问题,甚至想在新标准中"修正"它,但又担心粉碎向后兼容性。
本日我就来给各人扒一扒这个C++界的"猫头鹰"(白天是鸟,晚上是猫...不,是看起来像vector,实际不是vector)到底坑在哪里。保证讲得普通易懂,小白也能看明白,包你看完直呼"涨姿势了"!
微信搜索 【跟着小康学编程】,关注我,定期分享计算机编程硬核技能文章。
一、vector是个什么妖怪?

正常的vector是啥样?

在深入了解vector之前,我们得先搞清晰一个普通的 vector 该是啥样的。
想象一下,vector就像是一排连续的小格子,每个格子里放一个元素。当你用vector时,每个格子大小固定为4字节(在大多数平台上),整齐划一地排列着:
[code]vector normal_vec = {1, 2, 3};int& first = normal_vec[0];  // 拿到第一个元素的引用first = 100;  // 修改这个引用cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表