草庐IT

整数二分

全部标签

c++ - 声明一个非常大的整数 vector ?

有没有一种方法可以在C++中执行此操作而不会在运行时崩溃?现在我宣布vector>myvec(veclength);我怎样才能(正确地)将速度调到尽可能高的水平?即使在10^7时,当我应该有足够的计算机内存时它也会崩溃。 最佳答案 这应该占用大约250MiB的空间1(或更少,取决于架构)所以内存绝对不是这里的问题,max_size也不应该,其数量级为1017(≈264∕8+8+8)。我应该提到,我通过查看GCC的libstdc++和LLVM的libc++中std::vector的实现,并通过在实时系统上进行测试,证实了这些计算。计算

c++ - C++ switch 仅适用于整数类型的基本原理是什么?

这个问题在这里已经有了答案:Whycan'ttheswitchstatementbeappliedtostrings?(22个答案)关闭7年前。我觉得C++应该允许switch()处理任何可以比较的类型,而不仅仅是整数类型。这似乎很奇怪:switch(myEnum){casemyEnumValue1:...break;casemyEnumValue1:...break;}在语义上等同于:if(myEnum==myEnumValue1)...elseif(myEnum==myEnumValue2)...但这只适用于整数类型。为什么?这样限制的目的是什么?我知道编译器为switch生成的代

C++:在编译时确定给定整数类型的整数转换等级?

在我正在进行的项目中,我有一个数据结构可以存储各种类型的数字,并且需要保证不会意外丢失精度/信息。因为标准C++允许隐式发生一些有损转换,所以我创建了一个类型特征,用于确定我将允许哪些转换并禁止那些我不喜欢使用SFINAE的转换。我意识到我的做法存在一个微妙的问题。这是一段代码摘录://Ifitisbetweentwofloatingpointtypes,notruncationisallowed.templatestructsafe_numeric::value&&std::is_floating_point::value)>::type>{staticconstexprboolva

c++ - 整数类型的模板函数特化

假设我有一个模板函数:templatevoidf(Tt){...}我想为所有原始整数类型编写一个特化。执行此操作的最佳方法是什么?我的意思是:template::valueistrue>voidf(Ii){...}然后编译器为整数类型选择第二个版本,为其他所有类型选择第一个版本? 最佳答案 使用SFINAE//Foralltypesexceptintegraltypes:templatetypenamestd::enable_if::value>::typef(Tt){//...}//Forintegraltypesonly:tem

c++ - 在模板类中时枚举中的整数溢出

深入研究模板元编程,我发现C++中枚举范围的奇怪行为。我收到一个警告:表达式中整数溢出,看起来我实际上并不想要一个超出枚举范围的值。这是代码:#include#includetemplateclasspow{public:enum{result=2*pow::result};};templateclasspow{public:enum{result=1};};enumtest{one,max=4294967295};enumtest_2{last=4294967295*2};intmain(){std::cout:\t"::result:\t"::result:\t"::result:

algorithm - 使用一组质数按升序生成整数

我有一组素数,我必须仅使用这些素数按升序生成整数。例如,如果集合是p={2,5}那么我的整数应该是1,2,4,5,8,10,16,20,25,...有没有什么高效的算法可以解决这个问题? 最佳答案 删除一个数字并将它的所有倍数(通过集合中的质数)重新插入优先级队列是错误的(在问题的意义上)-即它生成正确的序列,但效率低下。它在两个方面效率低下-首先,它过度生产序列;其次,每个PriorityQueue操作都会产生额外的成本(操作remove_top和insert通常不是O(1),当然不在任何列表中-或基于树的PriorityQueu

c++ - 为什么 c++ 编译器接受这个初始化?静态整数 x = x;

我刚知道这个:staticintx=x;为什么C++编译器接受这个初始化?我会称之为编译器异常,但有人可能会对此给出一个很好的解释。因此,对于具有静态存储的数据,可以使用自身初始化变量...我已经使用VS2015和VS2017编译器以及其他一些在线C++编译器进行了尝试。 最佳答案 static和非static变量其实是一样的。名称在其声明符之后和初始化之前(如果有的话)立即变得可见。因此在staticintx=x;名称x在第一次出现后立即可见,并且可以在初始化程序中引用。因为它是静态的,所以它的初始值是明确定义的(它是0)。这也是

c++ - 具有三个整数的结构键的良好哈希函数

对于一个简单的C++结构,它具有三个int来标识一个唯一的结构,如果对a、b和c的实际值了解得不多的话,什么可以是一个好的哈希函数实现。我需要将该结构用作unordered_map的键吗?structKey{inta,b,c;} 最佳答案 将整个结构传递给Murmurhash:https://sites.google.com/site/murmurhash/不要尝试自己混合这些值(例如上面的乘法、加法、异或等建议)。利用哈希函数的全部意义在于,它已经可以非常有效地混合它们。如果你预混合,你只是带走了有用的熵。

C++动态整数数组有时会导致崩溃

我写了一个简单的代码如下:voidshow(constinta[],unsignedelements);intmain(){show(newint[]{1,2,3,45},4);//doesnotwork}voidshow(constinta[],unsignedelements){cout它应该只输出{1,2,3,45}。如果我在括号中包含一个尺寸show(newint[4]{1,2,3,45},4);然后就可以了。所以很自然地我会假设如果我以这种方式编写new我必须指定大小(尽管我认为给它一个初始化列表会暗示大小)。但是,奇怪的是,当在show函数调用处设置断点并通过调试器逐步运行

c++ - 当 fread 正在更改其他整数变量的值时如何解决

我的大学作业遇到了麻烦,我正在用c++编写一些排序方法,而这恰好发生了:intnufi=0,d;cout应该打印:努菲值(value):0努菲值:0但是,相反,正在打印:努菲值(value):0nufi值:541151813基本上,任何经过fread的整型变量都会被改变;我尝试更改变量名称、更改打开的文件和我认为的每个测试,但错误仍然存​​在,但并不总是使用该值,当我更改变量名称时,数字也会更改,只有当我删除fread时,错误消失。其余代码都很好并经过测试,文件打开、结构、键等。有人知道会发生什么吗? 最佳答案 您遇到未定义的行为,