更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

c++中为什么不提倡使用vector示例详解

  • 发布:C++培训
  • 来源:C++资讯
  • 时间:2020-04-13 17:47

这篇文章主要给大家介绍了关于c++中为什么不提倡使用vector的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

vector< bool> 并不是一个STL容器,不是一个STL容器,不是一个STL容器!

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

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

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

而一般情况情况下

vector< bool> 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 << i << " ";

cout << endl;

//上式会输出1 1 0 1 0

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

而为什么说vector< bool>不是一个标准容器,就是因为它不能支持一些容器该有的基本操作,诸如取地址给指针初始化操作:

vector< bool> c{ false, true, false, true, false };

&tmp = c[0]; //错误,不能编译,对于引用来说,因为c[0]不是一个左值

bool *p = &c[0]; //错误,不能编译,因为无法将一个临时量地址给绑定到指针

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C#关键字async/await用法
下一篇:浅谈C语言中的注释风格小结

C语言宏定义的几种使用方法

C与C++内存管理避坑指南

C/C++代码规范注释有哪些讲究?

C语言中,全局变量滥用的后果竟如此严重?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省