草庐IT

c++ - 为什么使用 boost::ice_or 而不是 ||和 boost::ice_and 而不是 enable_if 中的 &&?

如问题所述,人们使用结构版本而不是正常条件是否有原因? 最佳答案 摘自BoostCodingGuidelinesforIntegralConstantExpressions:Don'tuselogicaloperatorsinintegralconstantexpressions;usetemplatemeta-programminginstead.Theheadercontainsanumberofworkaroundtemplates,thatfulfiltheroleoflogicaloperators,forexamplei

c++ - 使用 C++0x 的 unordered_map

我正在使用unordered_map其中包括:#include程序编译如下:g++Test.cc-std=gnu++0x-otest我在使用unordered_map吗?TR1或C++0x的。还是两者相同? 最佳答案 我相信gcc将他们的TR1header放在中,所以你应该得到C++11版本。但它们非常相似。 关于c++-使用C++0x的unordered_map,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 使用 C 类型 uuid_t 作为 std::map 中的键的最佳方法是什么?

这是在map中提供唯一键的适当方式吗?换句话说,key是由uuid中包含的唯一值生成的,还是由指向uuid_t结构的指针生成的?一个附带的问题,当我不关心容器内按键的排序时,是否有更高效的容器?#includeintmain(intargc,char**argv){std::mapmyMap;uuid_tid1;uuid_tid2;uuid_generate((unsignedchar*)&id1);uuid_generate((unsignedchar*)&id2);myMap[id1]=5;myMap[id2]=4;} 最佳答案

C++,使用#if TRUE 条件指令

当使用类似#ifTRUE的语句时,我应该期望发生什么?一个解释将不胜感激!我了解#if1的工作原理,但它在我的代码中给出的结果与使用#ifTRUE时完全不同。我理解#if是一个条件指令,它意味着什么;这只是我不明白的TRUE(或FALSE)部分。似乎以这种方式使用它永远不会执行语句后面的代码。这是一个例子:#ifTRUEcout我似乎从来没有看到“真”或“假”打印到屏幕和使用VisualStudio,内部语句自动变灰。 最佳答案 预处理器将包含/排除#if#endifblock的内容,具体取决于#if之后的表达式的计算结果为真还是假

c++ - STL map中的后序遍历

我在gcccomper上使用STL映射,它使用树来存储键值对。迭代器以有序的方式前进,因此有序遍历非常容易。然而,我的输出要求之一是后序遍历。我被特别要求使用map。有什么办法可以做到吗? 最佳答案 没有标准的方法来访问std::map实例的“实际树结构”。此外,该标准不知道(或关心)map的元素在map可能使用的任何内部树中的确切排列方式。红黑树和AVL树都是std::map的有效实现,根据实际使用的情况,您会得到不同的后序遍历。在实践中,我希望它总是R-B或非常相似,但实现自由度通知了标准定义的接口(interface)。简而言

c++ - 如何在 if-else 阶梯中针对特定条件进行互斥锁定和解锁?

在线程中运行的类的成员函数中,我想保护对if-else阶梯中某些共享资源的访问,如下所示。if(condition){}//themutexlockshouldbehereelseif(specificcondition)//themutexunlockshouldbehere{}else...我希望以上述方式进行锁定,因为除了访问共享资源以评估特定条件之外,我不会在任何地方访问/使用它,并且每个if/elseblock运行的所有操作都非常好长时间运行,我不想阻止其他线程访问该共享资源。我知道作用域锁和互斥锁,但我想不出在这种情况下可以使用它的方法。问题是:使用互斥锁定/解锁语句,甚至

C++11 在 map<key, value> 中为值(int 和 string)存储多种数据类型的最简单方法?

我想要一个使用的map键字符串值的整数或字符串像这样:std::mapmyMap;myMap["first_key"]=10;myMap["second_key"]="stringValue";做这种事情的最简单方法是什么?已添加)我正在寻找适用于C++11的解决方案 最佳答案 在c++17中,你可以使用std::variant,在此之前,您可以使用boost中的那个:usingIntOrString=std::variant;std::mapmyMap;myMap["first_key"]=10;myMap["second_key

c++ - 模板特化 enable_if

我正在尝试以这种方式专门化模板:classPropertyBase{public:SfPropertyBase(stringname){Name=name;}virtual~SfPropertyBase(){}stringName;virtualboolFromString(Object*obj,stringstr)=0;};templateclassProperty:publicSfPropertyBase{public:Property(stringname):SfPropertyBase(name){//specifictoPropertystuff}templatetypena

c++ - 在 C++0x 标准中会有 unordered_map,这与 boost unordered_map 相比如何?

哪个更有效率?有什么好的基准吗? 最佳答案 C++11的std::unordered_map规范类似于基于tr1::unordered_map的boost::unordered_map。话虽这么说,还是有一些细微的差别。在C++11中添加右值引用会导致添加可能对性能有用的emplace和emplace_hint函数。C++11现已得到广泛实现,因此您应该能够开箱即用地使用std::unordered_map。C++14不会对其进行重大更改,C++17将(可能)添加insert_or_assign和try_emplace成员函数。

c++ - std::map 是否允许在只读操作后重新平衡(如 Splay 树)

一些二叉树数据结构(例如Splay树)将在读取时重新平衡以将最近访问的项目移向根,这样可以减少后续查找时间。标准容器(std::map、std::set)是否允许这样做?至少一个问题是线程安全。以前,我认为只要您只对标准容器执行只读操作,从多线程执行此操作是安全的,而无需引入互斥锁/锁等。也许我需要重新考虑一下?我知道通常红黑树用于标准树容器,并且这些数据结构通常不会在读取时被修改。但是,确实修改过的假设实现是否符合要求?我的c++-standards-foo需要改进,但我不确定当前标准是否解决了容器的线程安全问题。这在c++0x中有什么不同吗? 最佳答案