草庐IT

Union-Find

全部标签

C++ STL,常量迭代器,find()

我目前正在学习STL,我对find和const迭代器有一些不确定性。假设我有一个查找功能:some_stl_container::const_iteratorfound=myContainer.find(value);在那之后,我应该检查我为found得到的是另一个const_iterator还是它对简单的迭代器进行检查有效。这样做基本上会有什么区别:if(found!=myContainer.cend())还有这个:if(found!=myContainer.end())第一个看起来更准确(至少对我而言),但第二个应该也能正常工作,对吧? 最佳答案

c++ - 如何为类 union 类编写析构函数

我正在尝试使用具有一些非原始变量的union(C++),但我一直在尝试为该类创建析构函数。正如我所读到的,不可能猜测正在使用union的哪个变量,因此没有隐式析构函数,并且当我在堆栈上使用这个union时,编译器会错误地指出析构函数已被删除。union体如下:structLuaVariant{LuaVariant():type(VARIANT_NONE){}LuaVariantType_ttype;union{std::stringtext;Positionpos;uint32_tnumber;};};type变量保存正在使用union体的哪个字段(从枚举中选择),目的是从union体

c++ - 包含“类型”成员的 union

我有一个关于union的问题,我仍然不了解。我已经阅读了很多关于它们的用途,并且在大多数情况下可以看到它们如何有用并理解它们。我已经看到它们可以提供原始的“C风格”多态性。我在几个网站上看到的例子是SDL的事件union:typedefunion{ Uint8type; SDL_ActiveEventactive; SDL_KeyboardEventkey; SDL_MouseMotionEventmotion; SDL_MouseButtonEventbutton; SDL_JoyAxisEventjaxis; SDL_JoyBallEventjball; SDL_JoyHatEve

c++ - 如何使 find() 与一组结构一起工作?

我正在使用set来保存包含多个字符串的结构。我希望能够使用集合的find()功能。但是,由于该集合包含结构,因此它不起作用。我希望find()只查看结构中的一个字符串。如何做到这一点?这是我尝试使用的代码。它工作正常,除了使用find()的部分:#include#include#includeusingnamespacestd;structtest{stringkey;stringdata;};booloperators;intmain(){testnewmember;newmember.key="key";newmember.data="data";s.insert(newmembe

c++ - 使用 C++11 编译 ui 代码时遇到 "unable to find string literal operator"错误

我正在使用我自己的GNUmakefile编译QTGUI应用程序(版本4)。当我将C++03标准与gcc编译器一起使用时,一切都运行良好。现在我需要C++11标准并得到错误:无法找到字符串文字运算符'operator""__FILE__'"在我的window.cpp中的以下几行connect(ui->myGLWidget,SIGNAL(xRotationChanged(int)),ui->rotXSlider,SLOT(setValue(int)));connect(ui->myGLWidget,SIGNAL(yRotationChanged(int)),ui->rotYSlider,S

c++ - Win32 文件锁定读取 : how to find out who's locking them

在C++中(特别是在VisualC++中),有时您无法打开一个文件,因为另一个可执行文件已经打开并且没有共享它以供读取。如果我尝试打开这样的文件,我如何以编程方式找出谁在锁定该文件? 最佳答案 在Windows2000及更高版本中,如果不使用内核模式驱动程序,则无法执行此操作。ProcessExplorer和其他类似工具会自动加载驱动程序来完成此操作。这是因为文件句柄位于内核空间中,用户模式应用程序(EXE文件)无法访问。如果你真的有兴趣这样做,看看thisproject. 关于c++-

c++ - Ada Variant Record 能否与 C++ union 二进制兼容?

我正在设计一个通信中间件,用于一个应用程序,该应用程序有一个Ada模块和许多C++模块,用于传递传递的参数(标量值)和结构。该应用程序在MSWindowsXP和Windows7中运行,C++部分在MSVC++2008中开发,Ada部分使用GPS/GNAT开发。Ada版本是1995,但我们正在进行编译器迁移(更新版本的GPS/GNAT),有可能使用更新的Ada规范。中间件是用C++编写的,我想使用包含在模块之间传递的所有类型的union类型,这样我就不需要为系统上使用的每种类型指定一个put/get函数。问题是,C++union是否与Ada变体记录二进制兼容?换句话说,如果我将C++un

c++ - 在 C++ 中,为什么仅包含 union 及其基类实例的派生类占用的内存大于 union 的大小?

更具体地说,一个类继承自一个空类,只包含一个union体,其成员包括基本无数据类的实例,比union体占用更多的内存。为什么会发生这种情况,是否有任何方法可以避免消耗额外的内存?下面的代码说明了我的问题:#includeclassempty_class{};structbig:publicempty_class{union{intdata[3];empty_classa;};};structsmall{union{intdata[3];empty_classa;};};intmain(){std::cout此代码的输出,当使用gcc版本7.3.0编译时使用-std=c++17编译(虽然

c++ - 这段代码是做什么的 : static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}};

#ifndefINFINITY#ifdef_MSC_VERunionMSVC_EVIL_FLOAT_HACK{unsigned__int8Bytes[4];floatValue;};staticunionMSVC_EVIL_FLOAT_HACKINFINITY_HACK={{0x00,0x00,0x80,0x7F}};#defineINFINITY(INFINITY_HACK.Value)#endif我目前正在开始使用Chipmunk物理引擎并在头文件中找到它INFINITY用于为物体设置无限动量,但是我不明白上面这段代码的作用! 最佳答案

c++ - union 初始化

我正在尝试全局初始化一个union,如下例所示:#includetypedefunion{chart[4];inti;}a;enum{w=5000,x,y,z};atemp={w};intmain(){printf("%d%d%d%d%d\n",temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);return0;}但是,如果您运行代码,您会注意到temp.i或temp.t[...]实际上都没有给出我初始化union时使用的正确项。我想如果我可以手动初始化整数成员就可以避免这种情况,但不幸的是我不能。我也无法更改结构中元素的顺序(交换int和c