草庐IT

c++ - 生成二维魔法六边形格子的算法

我正在尝试生成一个2D魔法六边形格子,(即我需要用C语言生成点的坐标)见附图,该图看起来像一个洋葱结构,其中较大的六边形内部有六边形等等.有人有想法吗?注意:如果有人在其他语言中有答案也没关系,我只需要看一下,这样我就可以开始构建自己的代码了。提前致谢。voidgenerate_particles(void){/*Generatestheparticle-positionsandchargeHereitindicatedtousethehexagonalreferential!!*/inti,j;intn=3;/*nrepresentthenthcenteredhexnumbergiv

c++ - 位操作 : keeping the common part at the left of the last different bit

考虑两个用二进制写的数字(左边是MSB):X=x7x6x5x4x3x2x1x0和Y=y7y6y5y4y3y2y1y0这些数字可以有任意位数,但都是同一类型。现在考虑x7==y7、x6==y6、x5==y5,但是x4!=y4。如何计算:Z=x7x6x500000或者换句话说,如何有效地计算一个数字,使公共(public)部分保持在最后一个不同位的左侧?templateinlineTf(constTx,constTy){//Somethinghere}例如,对于:x=10100101y=10110010它应该返回z=10100000注意:这是为了super计算的目的,这个操作将被执行数千亿

C++ 固定大小数组与同一类型的多个对象

我想知道(除了明显的语法差异之外)拥有一个包含一个对象(相同类型)的多个实例的类或该类型的固定大小的对象数组之间是否会有任何效率差异。在代码中:structA{doublex;doubley;doublez;};structB{doublexvec[3];};实际上,我会使用boost::arrays,它是C风格数组的更好的C++替代品。我主要关心构造/析构和读/写这样的替身,因为这些类通常只是为了调用其中一个成员函数而构造一次。感谢您的帮助/建议。 最佳答案 通常这两个结构的表示完全相同。但是,如果您为您的用例选择了错误的,则性能

c++ - bool 表达式的等价性

我有一个问题在于比较bool表达式(OR是+,AND是*)。更准确地说,这里有一个例子:我有以下表达式:“A+B+C”,我想将它与“B+A+C”进行比较。像字符串一样比较它不是解决方案——它会告诉我表达式不匹配,这当然是错误的。关于如何比较这些表达式的任何想法?关于如何解决这个问题有什么想法吗?我接受任何类型的建议,但(作为注释)我的应用程序中的最终代码将用C++编写(当然接受C)。普通表达式也可以包含括号:(A*B*C)+D或A+B*(C+D)+X*Y提前致谢尤利安 最佳答案 我认为穷尽(并且可能穷尽)创建真值表的竞争方法是将所有

c++ - 常量的哪个属性使其不可更改?

今天我遇到了一个面试,其中一个问题对我来说非常棘手。面试官说“如何让常量能够改变它的值?”我回答“使用指针”并给他看了一个例子:intmain(void){constinta=3;int*ptr;ptr=(int*)(&a);printf("A=%d\n",a);*ptr=5;printf("A=%d\n",a);return0;}但他说这很好。但是告诉我哪个是使常数不变的属性?他还说,有一个属性我们可以改变并使常量可变。有这样的属性(property)吗?它是如何工作的? 最佳答案 如果他说这很好,那他就错了:试图修改常量对象会导

c++ - #define 在 C/C++ 中的用法

我需要用C/C++写这样一个定义#definescanf(fscanf(inf,为了将每个scanf(替换为fscanf(inf,literary但是我不知道怎么...谢谢 最佳答案 您想使用Variadicmacro.在你的情况下,我相信你想要:#definescanf(...)fscanf(inf,__VA_ARGS__) 关于c++-#define在C/C++中的用法,我们在StackOverflow上找到一个类似的问题: https://stackov

c++ - 从 C 使用 C++ 损坏的函数

我有一个.lib文件,我没有它的源代码。我需要它的导出函数,但我是用C编写的,并且该函数是C++名称损坏的。我不会写extern"C",因为我没有源代码。如何在没有源代码和切换到C++的情况下链接损坏的函数? 最佳答案 制作C++包装器:包装器.cpp:#include"3rdparty.hpp"extern"C"intfoo(inta,intb){returnthird_party::secret_function(a,b);}consumer.c:externintfoo(int,int);//...构建:(例如使用GCC)g+

c++ - 为什么用 new 创建的 C++ 数组与 C 样式数组的行为不同?

我正在自学C++,因此一直在编写一些示例代码来真正巩固我对指针和数组的理解。我是这样写的:intmyints[]={20,40,60,80,100};//Cstylearray?shouldbestoredonstack?ismyint'stypepointertointoranarrayofint?howdoesitdifferfrommyotherints?int*myotherints=newint[5]{20,40,60,80,100};//newalwaysreturnspointer,isthisaC++stylearray?//doesthispointergetcrea

c++ - C/C++ 中的 typedef 是否真的通过组合复合类型(例如 int*)来创建新类型?

最近我发现我代码中的typedef与我建议的完全不同。像这样的例子:typedefint*ptype;ptypev1=0,v2=0;结果:v1和v2都被定义为指向int类型的指针。但是,如果您只是将第二句中的ptype替换为int*为int*v1=0,v2=0;或int*v1=0,v2=0;,只有v1是指针,v2是普通的int。typedef似乎没有做简单的替换。更重要的是,当涉及到像这样的复杂修饰符时:typedefint*ptype;constptypev3=0;结果将是:如果我们写constint*v3=0;。在上面的代码中,const代表整个ptype的修饰符,而不是ptype

c++ - 为什么在超出数组末尾写入时不会出现段错误?

为什么编译时没有报错?#includeusingnamespacestd;intmain(){int*a=newint[2];//inta[2];//eventhisisnotgivingerrora[0]=0;a[1]=1;a[2]=2;a[3]=3;a[100]=4;intb;return0;}谁能解释一下为什么会这样。提前致谢。) 最佳答案 因为未定义的行为==任何事情都可能发生。你很不幸它没有崩溃,这种行为可能会隐藏错误。 关于c++-为什么在超出数组末尾写入时不会出现段错误?,