STLvectorbool总结


STLvectorbool总结

这里是vector<bool>的总结,详细原文可看后面链接。
class template specialization
<vector>

std::vector<bool>

template < class T, class Alloc = allocator<T> > class vector; // generic template
template <class Alloc> class vector<bool,Alloc>;               // bool specialization
这是特别为了当元素类型是bool类型的时候,优化空间所编写的一个vector版本。

这个vector的行为和未特化的vector版本类似,但是有下列的变化。

  • 存储的时候存储一列的bool值是没有必要的,编译器可能将每一个bool值存放在一个bit里面以优化存储空间。
  • 元素的构造不使用内存分配器,而是直接在内存相应的bit里面设置其值。
  • 成员方法flip和新特性的swap方法。
  • 一个特别的成员类型,reference,一个类用来在容器存储内存位置访问单个bits的接口,该接口用来模仿bool的reference,反之,成员类型const_reference是一个真正的bool.
  • 容器使用的指针以及迭代器类型既不必要指向也不必要符合迭代器。(这句翻译的好怪。。。),即便他们看起来应该模范他们应该做的行为。


这些变化提供了一个离奇的接口给这个特例化的vector,以及促使数据整理时的内存优化(这可能适合也可能不适合你的需要)。在任何情况下,直接实例化vector的非特例化的bool版本是不可能的。避免该限制的变通方法是使用其他的类型(char,unsigned char)或者容器(像deque)的封装类型,或者使用更远的特别的分配器类型。


特例化的版本和未特例化的版本具有相同的成员方法。除了data,emplace以及emplace_back,这些在特例化版本中不会出现

原文地址:http://blog.csdn.net/qq844352155/article/details/38708201



———————————————————————————————————————————————————

public member class
<vector>

std::vector<bool>::reference

class reference;
Reference type

这个内部类是vector<bool>直接访问其元素时返回non-const引用时设计的,它使用模拟成引用的接口访问单个的bits。

原文地址:http://blog.csdn.net/qq844352155/article/details/38709141


———————————————————————————————————————————————————

public member function
<vector>

std::vector<bool>::flip

void flip() noexcept;
翻转容器内的所有bit值,即所有的true变为false,所有的false变为true;

Parameters

none


Return value

none

原文地址:http://blog.csdn.net/qq844352155/article/details/38710297



———————————————————————————————————————————————————

public member function
<vector>

std::vector<bool>::swap

swap containers (1)
void swap (vector& x);
swap elements (2)
static void swap (reference ref1, reference ref2) noexcept;
第一个swap方法的签名和vector::swap是一样的。

另一个静态的swap方法交换个别的元素(bits)被添加到vector<bool>中

Parameters

x

另一个vector<bool>容器,大小可能不同。

ref1, ref2

指向元素的引用,ref1的值将和ref2的值互换。

引用是一个成员类型,使用一个接口来模仿引用来访问单个的bool元素。

Return value

none

原文地址:http://blog.csdn.net/qq844352155/article/details/38710701

——————————————————————————————————————————————————————————————————

//总结的不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双

Email:coderguang@gmail.com

2014-8-27

于GDUT

——————————————————————————————————————————————————————————————————



发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注