【C++】vector<bool>的特别之处

 在一次刷题的过程中偶然发现一个问题,vector<bool>的运行速度要比其他vector<T>慢很多,查阅资料后惊奇的发现,vector<bool>甚至不是一个STL容器。

vector<bool> 不像其他容器一样按Byte存储的,它是按bit存储的,也就是说一个正常的bool类型的空间可以存放vector<bool>中的8个,空间上确实优化了很多,然鹅,c++是不能直接取对bit操作的,对其使用operator[]其实返回的不是bool的引用而是一个”proxy reference"是”std::vector< bool>:reference”类型的对象。

operator[]返回代理引用

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

 c[0]是std::vector< bool>:reference的对象,b在操作的进行了类型转换,而auto b则也变为代理引用,那在对d进行操作时就会影响到c[0]本身的值。

d = true;
for(auto i:c)
    cout << i << " ";
cout << endl;
//上式会输出1 1 0 1 0

比较其执行效率

运行相同次数的push_buck()比较vector<int>,vector<char>,vector<bool>的运行速度

int main(){
	vector<char> ch;
	vector<int> in;
	vector<bool> bo;

	int m = 1e6;
	clock_t t1, t2, t3;

	t1 = clock();
	for (int i = 0; i < m; i++){
		ch.push_back('0');
	}
	t1 = clock() - t1;

	t2 = clock();
	for (int i = 0; i < m; i++){
		in.push_back(0);
	}
	t2 = clock() - t2;

	t3 = clock();
	for (int i = 0; i < m; i++){
		bo.push_back(true);
	}
	t3 = clock() - t3;

	cout <<"vector<char> "<< t1 << "\n vector<int> " << t2 << "\nvector<bool> " << t3 << endl;
	cout << endl;

	system("pause");
	return 0;
}

  运行结果:

 

可以发现vector<bool> 在速度上远远不及其他的vector<T>。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值