vector为何在STL中独树一帜,其特殊性体现在哪些方面?
- 内容介绍
- 文章标签
- 相关推荐
本文共计887个文字,预计阅读时间需要4分钟。
前言:起因是这样的,前天在查C++11的range base for loop相关的内容时,看到说vector是一个proxy iterator,非常特殊,于是好奇地研究了一下。
首先,vector并不是一个通常意义上的vector。它是一个特殊的容器,用于存储布尔值。其特殊性在于,它内部实现为一个位域(bit field),这意味着每个布尔值只占用一个比特位,从而大大节省了空间。
由于vector的特殊性,它的迭代器(iterator)也不同于一般的迭代器。它是一个proxy iterator,即代理迭代器。这意味着vector的迭代器并不是直接指向存储数据的内存地址,而是指向一个内部的proxy对象。这个proxy对象负责将迭代器的操作转换为对位域的操作。
这种设计虽然节省了空间,但也带来了一些不便。例如,你不能使用普通的迭代器操作,如++、*等,来直接访问vector中的元素。你需要使用特殊的操作符来访问每个布尔值。
总的来说,vector是一个非常有意思的研究对象,它展示了C++语言在容器设计上的巧妙之处。
前言
起因是这样的,昨天在查C++11的range base for loop相关的东西的时候,看到说vector< bool >是一个proxy iterator,非常的特殊,于是就好奇的研究了一下。
本文共计887个文字,预计阅读时间需要4分钟。
前言:起因是这样的,前天在查C++11的range base for loop相关的内容时,看到说vector是一个proxy iterator,非常特殊,于是好奇地研究了一下。
首先,vector并不是一个通常意义上的vector。它是一个特殊的容器,用于存储布尔值。其特殊性在于,它内部实现为一个位域(bit field),这意味着每个布尔值只占用一个比特位,从而大大节省了空间。
由于vector的特殊性,它的迭代器(iterator)也不同于一般的迭代器。它是一个proxy iterator,即代理迭代器。这意味着vector的迭代器并不是直接指向存储数据的内存地址,而是指向一个内部的proxy对象。这个proxy对象负责将迭代器的操作转换为对位域的操作。
这种设计虽然节省了空间,但也带来了一些不便。例如,你不能使用普通的迭代器操作,如++、*等,来直接访问vector中的元素。你需要使用特殊的操作符来访问每个布尔值。
总的来说,vector是一个非常有意思的研究对象,它展示了C++语言在容器设计上的巧妙之处。
前言
起因是这样的,昨天在查C++11的range base for loop相关的东西的时候,看到说vector< bool >是一个proxy iterator,非常的特殊,于是就好奇的研究了一下。

