千家信息网

C++中的vector为什么不是STL容器

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"C++中的vector为什么不是STL容器",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中的vector为什么不是STL容器"吧!
千家信息网最后更新 2026年11月02日C++中的vector为什么不是STL容器

本篇内容主要讲解"C++中的vector为什么不是STL容器",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中的vector为什么不是STL容器"吧!

前言

起因是这样的,昨天在查C++11的range base for loop相关的东西的时候,看到说vector< bool >是一个proxy iterator,非常的特殊,于是就好奇的研究了一下。

首先vector< bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。

早在C++98的时候,就有vector< bool>这个类型了,但是因为当时为了考虑到节省空间的想法,所以vector< bool>里面不是一个Byte一个Byte储存的,它是一个bit一个bit储存的!

因为没有直接去给一个bit来操作,所以用operator[]的时候,正常容器返回的应该是一个对应元素的引用,但是对于vector< bool>实际上访问的是一个"proxy reference"而不是一个"true reference",返回的是"std::vector< bool>:reference"类型的对象。

而一般情况情况下

vector c{ false, true, false, true, false };bool b = c[0];auto d = c[0];

对于b的初始化它其实暗含了一个隐式的类型转换。而对于d,它的类型并不是bool,而是一个vector< bool>中的一个内部类。

而此时如果修改d的值,c中的值也会跟着修改

d = true;for(auto i:c)  cout<

而如果c被销毁,d就会变成一个悬垂指针,再对d操作就属于未定义行为。

所以对于容器一些基本的操作它并不能满足,诸如取地址给指针初始化操作【因为没有办法给单一一个bit来取地址,或者搞引用】

vector c{ false, true, false, true, false };bool &tmp = c[0];  //错误,不能编译,对于引用来说,因为c[0]不是一个左值bool *p = &c[0];  //错误,不能编译,因为无法将一个临时量地址给绑定到指针

所以为什么说vector< bool>不是一个标准容器,就是因为它不能支持一些容器该有的基本操作。

What is the correct way of using C++11's range-based for?

条款6:当auto推导出意外的类型时,使用显式的类型初始化语义

到此,相信大家对"C++中的vector为什么不是STL容器"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

容器 类型 C++ 地址 指针 时候 内容 实际 情况 错误 学习 编译 实用 更深 特殊 好奇 意外 东西 元素 兴趣 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 广州万易互联网科技有限公司 广州百单互联网科技有限公司 新华互联网科技学校 互联网科技卖菜 致骋互联网科技 鑫亿盛互联网科技 小马过河互联网科技 碳银互联网科技有限公司 滨湖区互联网智能科技产品供应 无锡溥仪互联网科技有限公司 济南和联互联网科技有限公司 注册互联网科技公司经营范围大全 亳州好赞互联网科技有限公司 群盈汇互联网科技有限公司 为客找房互联网科技公司怎么样 云南省自由互联网科技有限公司 扫呗互联网科技有限公司 江苏互联网智能科技产品出厂价 青岛易易互联网科技 喔噻互联网科技有限公司 互联网科技公司简介 互联网 科技创新 镁科技互联网资讯平台 哈尔滨新华互联网科技 苏州五指互联网络科技有限 中国互联网公司排名锤子科技 广州千川互联网科技有限公司 美国互联网科技公司 张家口科技产业互联网平台
0