草庐IT

Union-Find

全部标签

c++ - C++中 union 中的 'protected'有什么意义

protected成员或函数有什么用处?您不能从union继承,因此没有子节点可以访问它。它是提供功能用途还是仅仅因为移除它很麻烦而存在? 最佳答案 union中的protected变得完全等同于private,但这种允许不会造成任何损害并避免额外的特殊情况处理和额外的差异union和struct/class(在标准中一起描述)。老实说,我认为可以在union中使用protected只是为了不将第umteenth特殊情况添加到标准中;也许标准委员会甚至没有想到要区分这种行为,因为这是一个非常奇怪的极端情况,但按照目前的规定并没有什么

c++ - 使用 union 来代替强制转换是否定义明确?

今天早上我与一位同事讨论了检测字节顺序的“编码技巧”的正确性。诀窍是:boolis_big_endian(){union{inti;charc[sizeof(int)];}foo;foo.i=1;return(foo.c[0]==1);}对我来说,union的这种用法似乎是不正确的,因为设置一个union成员并读取另一个成员是not明确定义的。但我不得不承认,这只是一种感觉,我缺乏实际的证据来加强我的观点。这个技巧正确吗?谁在这里? 最佳答案 您的代码不可移植。它可能适用于某些编译器,也可能不适用。当您尝试访问union的非事件成员

c++ - 普通数组上的 std::lower_bound 和 std::find

我喜欢在普通数组上尽可能使用std::algorithm。现在我有2个疑问;假设我想使用std::lower_bound如果找不到我作为参数提供的值会怎样?inta[]={1,2,3,4,5,6};int*f=std::lower_bound(a,a+6,20);我打印*f时的结果是20。如果我使用std::find,也会发生同样的情况。inta[]={1,2,3,4,5,6};int*f=std::find(a,a+6,20);我打印*f时的结果是20。返回值是否总是原始参数什么时候找不到?在性能方面,std::lower_bound比std::find表现更好,因为它实现了二进制搜

c++ - 您可以将一个 union 成员的值(value)分配给另一个 union 成员吗?

考虑以下代码片段:union{inta;floatb;};a=/*...*/;b=a;//isthisUB?b=b+something;将一个union成员分配给另一个union成员是否有效? 最佳答案 不幸的是,我认为这个问题的答案是C++中未指定union操作,尽管自分配完全没问题。自赋值是明确定义的行为,如果我们查看草案C++标准部分1.9程序执行段落15有以下示例:voidf(int,int);voidg(inti,int*v){i=v[i++];//thebehaviorisundefinedi=7,i++,i++;//i

c++ - STL find 的性能优于手工循环

我有一些问题。给定以下C++代码片段:#include#include#include#include#includestructincrementor{incrementor():curr_(){}unsignedintoperator()(){returncurr_++;}private:unsignedintcurr_;};templatecharconst*value_found(Vecconst&v,typenameVec::const_iteratori){returni==v.end()?"no":"yes";}templatetypenameVec::const_ite

c++ - 使用带有 unique_ptr 的 union

当我尝试std::move或std::make_unique时,尝试在union中使用unique_ptr会给我一个段错误。#include#includeunionmyUnion{struct{std::unique_ptrupFloat;}structUpFloat;struct{std::unique_ptrupInt;}structUpInt;myUnion(){}~myUnion(){}};structmyStruct{intx;myUnionnum;};intmain(){myStructaStruct,bStruct;aStruct.x=1;bStruct.x=2;aut

c++ - 我使用 C++ 标准库的 find 有什么问题?

我正在尝试像这样使用C++标准库的find算法:templateconstunsignedintAdjacencyList::_index_for_node(conststd::vector&list,constT&node)throw(NoSuchNodeException){std::vector::iteratoriter=std::find(list.begin(),list.end(),node);}当我尝试编译时,出现以下错误:Infileincludedfrom../AdjacencyList.cpp:8:../AdjacencyList.h:Inmemberfuncti

c++ - 检查字符串是否以另一个字符串 : find or compare? 开头

如果您想知道一个字符串是否以另一个字符串开头,您将如何在C++/STL中做到这一点?Java中有String.startsWith,Python也有string.startwith,STL没有直接的方法。相反,有std::string::find和std::string::compare。直到现在我都使用了这两种方法,主要取决于我现在的心情:if(str1.compare(0,str2.length(),str2)==0)do_something();if(str1.find(str2)==0)do_something();当然,你也可以做到str.substr(0,str2.leng

c++ - 为什么 glm::vec 将 vec 值表示为 union ?

我在看vec4glm的源代码实现,我想知道为什么它们用union表示vector值,而不是像float这样的原始数据类型或int?这是我在vec4中找到的代码实现:union{Tx,r,s;};union{Ty,g,t;};union{Tz,b,p;};union{Tw,a,q;};如果我们只写Tx有什么区别?,Ty,Tz,Tw? 最佳答案 因为vec4通常用于:空间坐标x、y、z、w颜色组件r、g、b、a纹理坐标s、t、p、q(虽然这些不太标准化,而且我我们还看到了r和u在不同的上下文中使用)使用union允许使用访问例如第二个数

c++ - CMake FIND_PACKAGE 成功但返回错误的路径

我正在尝试使用我的CMakeLists.txt中的以下代码将CMake2.8.6链接到boost::program_optionsFIND_PACKAGE(BoostCOMPONENTSprogram_optionsREQUIRED)INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})ADD_EXECUTABLE(segmentsegment.cpp)TARGET_LINK_LIBRARIES(segment${Boost_LIBRARIES})find命令似乎成功,但将错误的目录传递给链接器。包实际上在:`/usr/lib64/libboost_prog