草庐IT

Union-Find

全部标签

c++ - 指针和数据之间的 union ,可能存在的陷阱?

我正在编写一个系统,该系统具有大量冗余数据,需要将这些数据保存在内存中,并以尽可能短的延迟进行访问。(未压缩,数据保证至少占用1GB内存)。我想到的一种方法是创建如下所示的容器类:classChunk{public:Chunk(){...};~Chunk(){/*carefullydeleteelementsaccordingtomask*/};getElement(intindex);setElement(intindex);private:unsignedcharmask;//onbit==dataisnot-redundant,arrayis8x8,64elementsunion

c++ - set::find() 没有找到

这段代码有问题(cubeBoxData是一组cubeBox):cubeBoxtemp(bx,by,bz);cubeBoxData.insert(temp);set::iteratori=cubeBoxData.find(temp);const_cast(*i).addCube(x,y,z);问题是cubeBoxData.find(temp);没有找到temp,然后程序尝试调用addCube()失败,我不知道为什么,因为这段代码工作正常(只需更改第三行):cubeBoxtemp(bx,by,bz);cubeBoxData.insert(temp);set::iteratori=find(

c++ - 您可以向 union 成员发送 "pointer to member"吗?

我能找到的所有描述都在类的上下文中谈论“指向成员的指针”。union与结构非常相似,尤其是也有成员。您能否也提供指向这些成员的指针?例如unionx{inta;floatb;};intx::*p=&x::a;我不是在谈论作为一个整体的union体的指针,作为union体成员的指针等。上面示例中的p实际上是一个偏移量,显然大小为0。我需要这个构造来回答thisquestion. 最佳答案 §3.9.2/1:复合类型可以通过以下方式构造:......指向非静态50类成员的指针,它们标识给定类的对象中给定类型的成员,§8.3.3/1:在声

c++ - std::map<key_type, value_type>::find(different_key_type)

我有一张map:std::mapmyMap;但是,在某些情况下,我想通过比较TyString==TyStringRef来std::map::find一个条目,即myMap.find(TyStringRef("MyString"));原因是TyString包装了一个它自己分配和释放的constchar*。但是,为了只找到一个条目,我不喜欢分配一个新的字符串,而是我只想使用引用(TyStringRef只包装一个constchar*而不分配或释放内存)。当然,我可以将TyStringRef转换为TyString,但这样我就有了上述的内存开销。有解决这个问题的智能方法吗?谢谢!

异常情况下的 C++ 错误 C2228( '.val' 左侧必须有类/结构/union )

在C++中,我正在尝试实现自己的any使用C++的类。然而,在我能够对其进行测试之前(如果我的实现不好,请随时纠正我),我得到了错误:errorC2228:leftof'.val'musthaveclass/struct/union使用value()两次功能两次,当它在其他地方工作时,这看起来很奇怪。我唯一能想到的就是decltype函数前面导致错误,但它不应该:编辑:我更新了为templateany(TV){...}更改变量的方式构造函数classany{protected:templatestructvariable{public:Tval;variable(){}variable

c++ - 访问结构的 union 成员的优雅方式

有没有办法反转#define指令?在下面的例子中#defineZERO0#defineONE1#defineTWO2#defineTHREE3是否可以从整数值2中检索出TWO?此示例来自C代码,但如果需要,我可以使用一些C++代码。我的目标是能够分解一些这种形式的虚假switch-case循环:switch(num){caseZERO:returnstd::to_string(foo.V_ZERO);caseONE:returnstd::to_string(foo.V_ONE);caseTWO:returnstd::to_string(foo.V_TWO);caseTHREE:retu

c++ - 如何在具有模板函数的类中使用类型安全的 union (变体)?

我想在类中放置一个std::variant并使用模板函数返回其元素。这是一个例子:#include#includeclassClass{public:std::variantcont;Class(){}templateClass(constVv){cont=v;}templateVfun(){if(std::holds_alternative(cont))returnstd::get(cont);elseif(std::holds_alternative(cont))returnstd::get(cont);}};intmain(){Classc;c=20;doubled=c.fun(

c++ - 如何从 C++ 源代码中提取所有类型定义、结构和 union

我继承了一个包含数百个文件的VisualStudio项目。我想从每个.h/.cpp文件中提取所有类型定义、结构和union,并将结果放入一个文件中。每个typdef/struct/union都应该在结果文件中占一行。这将使排序变得容易得多。typdefintmyType;structmyFirstStruct{chara;intb;...};unionPart_Number_Serial_Number_Part_2_Response_Message_Type{struct{Message_Response_Head_TypeHead;Part_Num_Serial_Num_Part_2

c++ - union 提取数据

union不会在this像这样使用时会导致UB的问题:unionData{unsignedintintValue;unsignedcharargbBytes[4];};Datadata;data.intValue=1235347;unsignedcharalpha=data.argbBytes[0];//UB?我在考虑标准中的9.5/1:Inaunion,atmostoneofthedatamemberscanbeactiveatanytime,thatis,thevalueofatmostoneofthedatamemberscanbestoredinaunionatanytime.

c++ - C++ 中的 union 和非默认可构造对象

我的程序中有一种情况,我需要进行一些从字符串到各种类型的转换,显然结果只能是一种类型。所以我选择创建一个union并将其命名为variant,如下所示:unionvariant{intv_int;floatv_float;doublev_double;longv_long;boost::gregorian::datev_date;//Compilercomplainsthisobjecthasauser-definedctorand/ornon-defaultctor.};我是这样使用的:boolConvert(conststd::string&str,variant&var){Str