当前位置:  开发笔记 > 编程语言 > 正文

C++ 11中的vector <char> VS vector <bool>

如何解决《C++11中的vector<char>VSvector<bool>》经验,为你挑选了2个好方法。

我们为什么要用vector而不是vectorvector更快的原因是什么?



1> 101010..:

std::vector这是一项专门std::vector针对空间效率(有争议)的专业化.但是,它的行为与常规相似但并不相同std::vector.这主要归因于这样的事实:std::vector它不是通常的C++标准库意义上的容器,而是一个位数组.a std::vector和常规之间的一些区别std::vector是:

std::vector::iterator 不是随机访问迭代器.

std::vector 不需要将其元素存储为连续数组.

std::vector公开class std::vector::reference作为访问各个位的方法.特别是,这个类的对象被返回operator[],std::vector::front,std::vector::back按值.

std::vectorstd::allocator_traits::construct用于构造位值.

std::vector 不保证同一容器中的不同元素可以由不同的线程同时修改.

std::vector有一个不同的界面(即flip())

除了打破std::vector作为连续容器的概念含义之外,这些差异也会破坏用户代码,特别是当此代码是通用的(即模板代码)时.

为了澄清,请考虑以下示例:

template void foo(std::vector &v) {
 T &frnt = v.front();
 ...
}

以上示例适用于T除以外的所有内容T = bool.正如已经提到的,这种失败的原因是v.front()返回的值是临时的(按值返回),因此不能绑定到引用.

为了避免这种破坏,许多程序员避免使用std::vector和更喜欢使用std::vector.由于引起的许多问题,许多人表示使用std::vector可以被认为是过早的优化.为解决这个问题,许多杰出的C++社区成员提出了建议.其中一个提议建议以std::vector不同的名称删除它不会引用C++标准库容器.

现在到时间性能问题,主要问题std::vector是它的各自std::algorithm算法没有针对它进行优化.因此,尽管您可以通过使用它来获得空间,但它的使用可能会导致非常显着的速度悲观.

参考书目

    矢量:更多问题,更好的解决方案,草药Sutter

    vector,霍华德Hinnant

    std::vector



2> Jon Chesterf..:

vector是一个位数组.vector是一个字节数组.前者使用较少的空间来换取更复杂的索引操作.

vector实际上是否更快可能是体系结构的功能,尤其是缓存.如果你vector完全适合x86_64上的L1缓存,那么它可能比vector没有的更快.

如果表现很重要,通常的建议适用于衡量您申请中的表现.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有