草庐IT

c++ - 使代码更小以实现多重继承

我编写了一个非常小的程序,您可以在其中输入您是男孩还是女孩,然后它会打印出一条声明。我的主要问题是,从我的代码中,除了从基类复制和粘贴之外,还有什么更容易为女性编写的方法。这是我的代码#include#includeclassMan{protected:std::stringname;public:voidgetInfo(std::stringhName){name=hName;}voidshowInfo(){std::cout>tName;std::cout>choice;//ifhandlerif(choice=="boy"){person.getInfo(tName);perso

c++ - 使用 C++11 std::condition_variable 的 Gtest 意味着 valgrind 错误

如果我以这种方式使用google测试框架编写测试:TEST_F(TestFName,TestName){std::condition_variablecv;}它会生成一个valgrind错误。我使用--leak-check=full--track-origins=yes选项运行它。Conditionaljumpormovedependsonuninitialisedvalue(s)==17215==at0x4E3DA82:pthread_cond_destroy@@GLIBC_2.3.2(pthread_cond_destroy.c:35)...Uninitialisedvaluewa

c++ - 使用 std::unique_ptr 管理 COM 对象

我正在尝试使用智能指针在我的类中保存COM对象,同时避免使用ComPtr。是否可以为此目的使用unique_ptr?我对智能指针很陌生,到目前为止我有点困惑。请考虑以下简化代码:classTexture{private:structComDeleter{operator()(IUnknown*p){p.Release();deletep;}}ID3D11Texture*m_dumbTexture;std::unique_ptrm_smartTexture;public:ID3D11Texture*getDumbTexture()const{returnm_dumbTexture;}ID

c++ - 为什么删除元素的 std::for_each 不会中断迭代?

据我所知,在集合迭代期间删除元素会破坏迭代或导致您跳过元素。为什么使用删除的谓词调用std::for_each不会导致这种情况发生?(有效)。代码片段:#include#include#includeusingnamespacestd;intmain(){mapm;m[1]=5000;m[2]=1;m[3]=2;m[4]=5000;m[5]=5000;m[6]=3;//Eraseallelements>1000std::for_each(m.begin(),m.end(),[&](constdecltype(m)::value_type&v){if(v.second>1000){m.e

c++ - union 中的 std::shared_ptr

我正在实现一个“变体”类,它必须具有尽可能小的内存占用并使用共享指针机制存储一些对象。为此,我想在所有变量类型的类中建立一个union。这包括一些shared_ptr。operator=和复制构造函数必须更改变量的数据类型,从而切换到union中的另一个成员。切换到shared_ptr后,应将其重置为null而无需删除/取消拥有指针。有办法做到这一点吗?当然,还有其他方法可以实现这一点,但在我的例子中,它们通常更复杂、更不安全或消耗更多内存。不过欢迎提出任何建议。谢谢! 最佳答案 重置为null是不够的;的实现std::shared

c++ - std::vector::assign - 重新分配数据?

我正在使用STL库,我的目标是尽量减少数据重新分配的情况。我在想,是吗?std::vector::assign(size_typen,constvalue_type&val)如果大小未更改或实际上只是分配新值(例如,使用operator=),则重新分配数据?STL文档位于http://www.cplusplus.com/说以下(C++98):Inthefillversion(2),thenewcontentsarenelements,eachinitializedtoacopyofval.Ifareallocationhappens,thestorageneededisallocate

C++ : generate all subsets from set with one condition

我正在尝试编写代码,通过一个条件从集合中生成所有子集,例如如果我有threshold=2,并且设置了三个:1,2,3,4,51,3,51,3,4然后程序会输出:第一次迭代时的生成集:1=numberoffrequency=32=numberoffrequency=13=numberoffrequency=34=numberoffrequency=25=numberoffrequency=2由于数字2第二次迭代时的生成集:1,3=numberoffrequency=31,4=numberoffrequency=21,5=numberoffrequency=23,4=numberoffre

c++ - 为什么 std::copy 不向量化?

考虑这个通用代码:#include#include#include//std::copyintmain(){constintn=1024;floata1[n],a2[n];std::srand(std::time(0));for(inti=0;i当我在Ubuntu上使用g++/gcc4.8.1和-O3-march=native-mtune=native标志编译时,我得到对应的行无法对拷贝进行矢量化,因为:note:notvectorized:notenoughdata-refsinbasicblock.如果我用for(inti=0;i我也收到了相同的编译器消息。我有点不解。直觉上我会想

c++ - 用户定义的重载运算符 * 与 std::chrono::duration

我创建了一个Frequency类模板,旨在与std::chrono::duration结合使用.Frequency对象存储每单位持续时间的周期数(两者都使用其类型的模板参数)。这个想法是将频率乘以持续时间产生一个Rep类型的对象。这是类定义。除了相关成员,我已经省略了所有成员。#include#includeusingnamespacestd::chrono;template>classFrequency{public:explicitFrequency(Repcycles):_cycles{cycles}{}friendRepoperator*(constFrequency&f,co

c++ - 是否有对两位值的 std::bitset 的概括?

假设我是一名基因组科学家,试图存储极长的字符串,每个字符串代表两位信息(即每个元素是G、A、T或C)。因为字符串非常长,所以我需要能够以精确的2N位(或者更确切地说,N/4字节)存储长度为N的字符串。考虑到这种动机,我正在寻找std::bitset的概括(或boost::dynamic_bitset)适用于两位值而不是一位值。我要存储N这样的两位值,每个值可以是0、1、2或3。我需要在内存中尽可能紧密地打包数据,所以vector将不起作用(因为它浪费了4倍的内存)。实现我的目标的最佳方式是什么?一种选择是用定制的operator[]包装现有的位集模板。、迭代器等,但如果可能的话,我更愿