草庐IT

c++ - 虚拟重载与 `std::function` 成员?

我现在有一个类,我们称之为Generic.这个类有成员和属性,我打算在std::vector中使用它或类似的,处理这个类的几个实例。另外,我想特化这个类,通用对象和特化对象之间的唯一区别是一个私有(private)方法,它不访问类的任何成员(但被其他方法调用)。我的第一个想法是简单地声明它virtual并像这样在专门的类中重载它:classGeneric{//allothermembersandattributesprivate:virtualfloatspecialFunc(floatx)const=0;};classSpecialized_one:publicGeneric{pri

C++11 future.wait_for() 总是返回 future_status::timeout

我有一个C++11程序来检查一个数是否为素数。程序等待准备就绪的future对象。准备就绪后,程序会告知future对象的提供者函数是否认为该数字是质数。//futureexample#include//std::cout#include//std::async,std::future#include//std::chrono::millisecondsconstintnumber=4;//444444443//anon-optimizedwayofcheckingforprimenumbers:boolis_prime(intx){for(inti=2;ifut=std::async

c++ - OS X 上的 std::locale 段错误,无法在任何其他平台上重现

我有以下代码建议用于我之前的问题generaterangeforwhichstd::isalphaevaluatestotrue.它显示当前区域设置中的所有char,isalpha的计算结果为true,因此对于英语区域设置,它显示AB...Zab...z。但是,当我尝试访问table。我在OSXMavericks10.9.4上用g++4.9和clang++(AppleLLVMversion5.1(clang-503.0.40))编译了它。在所有其他平台(Linux/Solaris)上它都可以工作,没有段错误。谁能指出OSX上C++的libc++/libstdc++是否存在问题,或者至少

c++ - 有没有办法让模板函数自动推断迭代器的底层数据类型?

我有一个函数,我需要一个迭代器的基础数据类型作为返回类型,如下所示:#include#include#includetemplatestd::vectorget_odd(ForwardIteratordata_begin,ForwardIteratordata_end){std::vectorret;std::copy_if(data_begin,data_end,std::back_inserter(ret),[](intx){returnx%2;});returnret;}intmain(){std::vectorvi{1,2,3,4,5};for(autoi:get_odd(vi

c++ - 是否有任何 std::set 实现不使用红黑树?

有没有人见过STL的实现,其中STL::set不是实现为红黑树?我问的原因是,在我的实验中,B树优于std::set(和其他红黑树实现)2到4倍,具体取决于值B.我很好奇,当似乎有更快的数据结构可用时,是否有令人信服的理由使用红黑树。 最佳答案 Google的一些人实际上构建了一个B-treebasedimplementationoftheC++standardlibrarycontainers.它们的性能似乎比标准二叉树实现要好得多。不过有一个问题。C++标准保证从映射或集合中删除元素只会使指向映射或集合中相同元素的其他迭代器无效

c++ - 为什么 std::list 有最大尺寸?

如果std::list是一个链表,那为什么要限制元素的数量?每个元素都是指向新节点的链接,您可以拥有多少个指针没有限制。 最佳答案 Ifstd::listisalinkedlistthenwhyistherealimitonhowmanyelementsyoucanhave?因为max_size()函数是所有标准容器的要求。Eachelementisalinktoanewnodeandthere'snolimitonhowmanypointersyoucanhave.是的:大小必须由size_type表示,因此限制是该类型的最大值。

c++ - 从 initializer_list 错误构造 std::map

我正在尝试创建一个类构造函数,它将接受一个初始化列表并用它初始化一个映射,如下所示:classTest{std::mapm_ints;public:Test(std::initializer_list>init):m_ints(init){}};但这会导致很长的错误消息,坦率地说,我不明白。我需要更改什么才能使这项工作正常进行? 最佳答案 声明std::initializer_list的模板参数具有类型std::pair这是一个演示程序#include#include#includeclassTest{std::mapm_ints;

c++ - STL C++ 中的内存分配

我对STLC++中的内存重新分配有点困惑。例如,我知道如果我声明一个vector,并继续将元素推回其中,则该vector将在某个时候需要重新分配内存空间并将所有现有元素复制到其中。对于链表,不需要重新分配,因为元素不是连续存储在堆栈中的,每个元素使用一个指针指向下一个元素。我的问题是,C++中的其他STL的情况如何?例如,string、map、unordered_map?他们需要重新分配吗? 最佳答案 (免责声明:标准可能不需要此处指定的所有具体数据结构,但记住它们有助于将规则链接到具体内容)std::string~=std::ve

c++ - 我可以从 ifstream/ofstream 获取使用的文件名吗?

我需要知道ifstream中是否存在一个方法,以便我可以获得与其关联的文件的名称。例如voidsome_function(ifstream&fin){//hereIneedgetnameoffile}ifstream/ofstream中是否有允许获取它的方法? 最佳答案 如前所述,std::fstream没有提供这样的方法。它是衍生物。此外,std::basic_filebuf不提供此类功能。为了简化,我在以下代码示例我建议您自己在一个小助手类中管理底层文件名:classMyFstream{public:MyFstream(cons

c++ - 这个 std::decay 的实现是正确的吗

std::decay的这个实现是否正确?templateTDecayType(T);templatestructdecay{usingtype=decltype(DecayType(declval()));};我问是因为我遇到的一切都使用一些模板分支来小心地操纵类型,而这似乎只是按照定义行事。 最佳答案 形成这样的函数调用需要按值传递,这需要复制/移动构造函数。该实现不够通用。不过,这是std::decay的要点。 关于c++-这个std::decay的实现是正确的吗,我们在StackO