草庐IT

c++ - std::string 类继承和繁琐的 C++ 重载解析

我需要扩展std::basic_string来处理路径字符串和不同的operator+:#includetemplateclasspath_basic_string:publicstd::basic_string{public:usingbase_type=std::basic_string;path_basic_string()=default;path_basic_string(constpath_basic_string&)=default;path_basic_string&operator=(constpath_basic_string&)=default;path_basi

c++ - constexpr 中的 std::variant 修改

考虑以下两个程序:#include#includeconstexprautof(){usingT=std::variant;Tt(false);t=T(true);returnstd::get(t);}templatevoidprint(){std::cout();}和#include#includeconstexprautof(){usingT=std::variant;Tt(false);t=T(42);returnstd::get(t);}templatevoidprint(){std::cout();}GCC编译这两个并输出预期的结果。在这两种情况下,Clang都不会编译它们中

c++ - 在 C++03 中返回类似 `std::auto_ptr` 的集合的最佳方法是什么?

std::auto_ptr不允许存储在STL容器中,例如std::vector.但是,偶尔会出现需要返回多态对象集合的情况,因此无法返回对象vector(由于切片问题)。我可以使用std::tr1::shared_ptr并将它们粘贴在vector中,但随后我不得不为维护单独的引用计数付出高昂的代价,并且拥有实际内存(容器)的对象在逻辑上不再“拥有”这些对象,因为它们可以在不考虑所有权的情况下从中复制出来。C++0x以std::vector>的形式为这个问题提供了完美的解决方案。,但我无权访问C++0x。一些其他注意事项:我无法访问C++0x,但我可以使用TR1。我想避免使用Boost(

C++0x |为什么 std::atomic 使用 volatile-qualifier 重载每个方法?

当前草案的以下摘录说明了我的意思:namespacestd{typedefstructatomic_bool{boolis_lock_free()constvolatile;boolis_lock_free()const;voidstore(bool,memory_order=memory_order_seq_cst)volatile;voidstore(bool,memory_order=memory_order_seq_cst);boolload(memory_order=memory_order_seq_cst)constvolatile;boolload(memory_orde

c++ - std::map::emplace() 缺失 - 过时的库?

我正在尝试使用map的C++11emplace()函数,但NetBeans说map没有这样的函数。查看header,它是“正确的”——没有提及(在Fedora16上)emplace()。这一切都很好,你知道……但我有点想使用emplace()。如何启用此功能?我知道它自去年三月以来就存在,可能更早。彻底的搜索表明emplace()基本上只存在于我的系统中的列表和vector的标题中。由于近十年来C++没有重大修订,所以我没有运气找到有关如果库“错误”该怎么办的文档。 最佳答案 如果您的实现不支持某些功能,您有两种选择:不要使用该功能

c++ - 严格别名和 std::array 与 C 风格数组

当使用gcc4.7(g++-mp-4.7(GCC)4.7.0在OSX上使用MacPorts构建)编译以下代码时,我得到了看似矛盾的结果。当我尝试将std::array的一部分重新解释和取消引用为uint32_t时,编译器不会报错,但在使用C样式数组时会报错.示例代码:#include#includeintmain(){std::arraystdarr;*reinterpret_cast(&stdarr[0])=0;//OKuint8_tarr[6];*reinterpret_cast(&arr[0])=0;//^error:dereferencingtype-punnedpointer

c++ - 带有 C++ 程序控制台输入的 Sublime Text

如何在SublimeText2.0.1中使用控制台输入?我选择了“工具->构建系统->C++”,并将hello.cpp文件添加到项目中:#includeintmain(){inta,b,c;std::cout>a>>b;c=a+b;std::cout构建成功,但是当我运行(“工具->运行”)时,行“std::cin>>a>>b;”已通过,我无法输入值。在带有g++的终端中,它运行良好。操作系统:Ubuntu12.04 最佳答案 我认为SublimeText不支持标准输入,但是,您可以创建一个文件stdin.input并在编辑器下使用

c++ - 有效地计算两个 std::multimap 迭代器之间的条目数

我想在不到O(N)的时间内计算std::multimap的两个迭代器之间的条目数。有什么技巧或聪明的方法可以做到这一点吗?因为std::multimap有双向迭代器,我的理解是像std::distance这样的东西可以在O(N)时间内完成。其他详细信息:multimap的键是一个N元组。我正在尝试查找multimap中键的第一个元素为0的条目数。它们键的第一个元素的选项是0和1,而multimap使用严格的弱排序,其中键的第一个元素始终是最重要的。即,所有带0的元素出现在任何带1的元素之前。上下文:迭代器由equal_range返回,它以对数时间运行。明确地说,我想测量范围的长度。谢谢

c++ - 如何用 vstring 替换 std::string?

我最近了解到,几年前库libstdc++包含vstring(也称为versa_string),它提供与std::相同的功能:string,但显然更符合C++标准。我曾尝试使用vstring来替代std::string,但我发现没有简单的方法来做到这一点。是否有一种简单的方法可以在不更改libstdc++源的情况下将std::string替换为vstring?我可以用别名替换代码中对std::string的所有使用,如以下list所示。然而,这种方法的问题是,std::string也在某些地方内部使用,例如在std::ostringstream中。这意味着语句std::ostringst

c++ - std::vector 和内存分配

似乎每次将新元素附加到std::vector时,如果没有空元素,分配的元素数量就会加倍(至少在GCC4.9中是这样)。我认为这样做是为了实现摊销常数时间复杂度。例如,运行这段代码后:v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);v.push_back(5);v.shrink_to_fit();//capacityis5nowv.push_back(6);std::cout输出为10。在内存受限的系统中,是否有任何方法可以防止这种行为,即使它是以性能损失为代价的?此外,是否可以指示它应该只分配固定数量的元素而不是加