草庐IT

vec_bool

全部标签

c++ - vector<bool> 如何处理引用和迭代器?

我们可能都知道C++98vector特化将boolean值存储为位而不是boolean变量。vector的元素不可寻址,因为C++没有指针和对位的引用,是否有解决此问题的方法,任何明显的陷阱(我似乎没有注意到)并且它是否实用甚至尝试这样做? 最佳答案 vector的元素与任何其他元素一样可寻址vector的元素,例如与operator[].但是,由于内存压缩,操作会变慢。也许更快的实现将使用您自己的内存实现并使用二进制移位来处理特定的boolean值。另一种方法是在适当的地方使用简单数组。请记住,您可以使用new动态分配它运营商。编

c++ - 为什么 std::vector<bool> 更快?

当我实现埃拉托色尼筛法时,我遇到了一个问题std::vector:无法访问原始数据。所以我决定使用自定义的简约实现,这样我就可以访问数据指针。#ifndefLIB_BITS_T_H#defineLIB_BITS_T_H#includetemplateclassbits_t{public:typedefBblock_t;staticconstsize_tblock_size=sizeof(block_t)*8;block_t*data;size_tsize;size_tblocks;classbit_ref{public:block_t*constblock;constblock_tma

c++ - 在 C 或 C++ 中的位图上高效执行 bool 表达式

在C或C++中对位图执行bool表达式的最有效方法是什么?例如,假设我有一个4位位图(a,b,c,d)。现在,假设我有一个简单的bool表达式,如(aANDb)OR(cANDd)。我应该如何表示bool表达式,以便我可以有效地将它应用到我的位图中?我正在寻找一种可以应用于任何bool表达式的通用解决方案,而不仅仅是作为示例给出的那个。换句话说,我正在寻找某种方法将bool表达式“编译”为另一种数据结构,该数据结构可用于有效地将我的位图缩减为bool值。位图结构是对数据库记录进行过滤操作的结果。每条记录都有自己的位图,位图中的每一位都是单独过滤规则的结果。bool表达式用于组合这些过滤规

c++ - 来自 boost 程序选项的 bool 选项

我正在使用boost程序选项从命令行参数中获取bool值。我希望我的论点被指定为“Y”、"is"、“N”、“否”。实际上我的代码是使用一个临时字符串完成的将被boost程序选项解析根据“Y”、“Yes”、“N”或“No”进行检查分配给bool变量成员。除此之外,我还使用了另一个获取默认值的临时字符串。我做了所有这些工作,因为我尝试了下面不起作用的代码namespacepod=boost::program_options;("Section.Flag",pod::value(&myFlag_bool)->default_value(false),"description")你知道提升程序

c++ - 正在初始化类型为 "int &"的引用(不是 const 限定的),其值是 "bool"类型的一些 hack?

我遇到了这个C++代码here://roundalternate//Bias:noneforsequentialcallsbool_is_up=false;templateFloatTyperoundalternate(constFloatType&value,int&is_up=_is_up){if((is_up!=is_up))returnroundhalfup(value);returnroundhalfdown(value);}这让我很困惑,这应该如何工作?这应该如何在每次调用此函数时进行交替调用?这段代码是完全错误的,还是由于某些编译器的怪异而应该工作的?它似乎用g++编译得

c++ - C++ 中的 Bool<true> 是什么——它来自 boost 吗?

我正在尝试使用一些示例代码,但我的编译器不会编译这一行:staticvoidexitActions(Host&h,Bool){}编译器是MSVS2005。我不认识Bool-所以不确定如何替换它。这个默认参数是否等效:staticvoidexitActions(Host&h,boolb=true){}样本来自http://accu.org/index.php/journals/252.代码只是文本中的片段-没有关于#include'是什么的片段-很难解决。Bool模板没有定义。 最佳答案 我猜Bool定义如下templatestruc

c++ - 指向 std::vector<bool> 的元素时出现编译器错误?

尝试使用std::vector我有一个令我非常惊讶的编译器错误。简而言之,获取std::vector的一个元素的地址并将其分配给unsignedchar指针:std::vectortest(10);unsignedchar*pb=&test[0];工作得很好,同时尝试用std::vector做同样的事情导致编译器错误:intmain(){std::vectortest(10);bool*pb=&test[0];//line4,compileerrorreturn0;}在VisualStudio上,它是这样的:std::vectorboolcannotconvertstd::_Vb_re

c++ - 赋值是否等同于 std::atomic<bool> 的加载/存储

我看到这可能在问题MustIcallatomicload/storeexplicitly?中得到了回答.因此,为了清楚起见,我将简明扼要地重申我的问题,希望future的读者能明白这一点。是std::atomicb(false);boolx=b;与相同std::atomicb(false);boolx=b.load();和std::atomicb(false);b=true;与相同std::atomicb(false);b.store(true);如果确实如此,那么:为什么有两个选项?明显的好处是什么?在处理原子时,更喜欢更冗长的load()/store()而不是可能令人困惑的赋值(=

c++ - 从 bool 值构造具有底层 "bool"类型的枚举?

如果我这样定义一个枚举:enumFoo:bool{Left=false,Right=true};然后尝试像这样从bool值构造一个:intmain(intac,constchar**av){Foofoo(ac>1);cout它失败了,但可以像这样使用额外的构造函数:Foofoo(Foo(ac>1));这是为什么?我以为Foofoo(...)是一个显式构造函数调用? 最佳答案 噗噗(ac>1);这是C++mostvexingparse的情况.这是一个什么都不做的函数声明。 关于c++-从b

C++:将值赋给原始数据类型(例如 bool)是原子操作吗?

这个问题在这里已经有了答案:Canaboolread/writeoperationbenotatomiconx86?[duplicate](3个答案)关闭4年前。假设有两个线程,一个为(已初始化的)bool赋值,另一个线程读取/检查这个bool。如果对bool的访问不protected或bool是非原子的,则线程清理程序可能会在此处检测到可能的数据竞争。这怎么可能?是否有可能分配给bool并不总是原子的,例如,由于缓存层次结构或乱序执行等硬件特性?