草庐IT

对数滚降

全部标签

c++ - 使用值初始化数组对数据进行零初始化

以下代码能否正确地对从malloc返回的内存进行零初始化?#include#includeintmain(){char*p=new(std::malloc(10))char[10]{};} 最佳答案 是的,由于行尾的{},它会零初始化内存,只要malloc不会在放置新。这是一个更完整地证明这一点的替代版本。#include#include#includecharmongo[10];intmain(){for(inti=0;i此程序将运行并且不打印任何内容,因为mongo数组(别名为p)已被p的初始化明确清除。相比之下,如果我们在该行

c++ - 对数组进行部分排序,以便对最后 n 个元素进行排序?

有没有办法对数据数组执行部分排序,以便对最后n个元素进行排序?好的我的意思是使用标准库,而不是实现我自己的排序函数(这就是我现在正在做的)。示例输出(使用较少的比较器):214||56810||之后的元素都大于||之前的元素,但只有||右边的元素(索引更接近数组的末尾)保证被排序。这基本上是对左侧(第一个)元素进行排序的std::partial_sort函数的反转。 最佳答案 将std::partial_sort与反向迭代器一起使用。例如:intx[20];std::iota(std::begin(x),std::end(x),0)

c++ - 对数组的元素编号感到困惑是-1

我正在阅读这里的代码:https://github.com/chenshuo/muduo/blob/master/muduo/base/Date.cc但我对这两行感到困惑:charrequire_32_bit_integer_at_least[sizeof(int)>=sizeof(int32_t)?1:-1];和(void)require_32_bit_integer_at_least;//nowarningplease他们的目的是什么?charrequire_32_bit_integer_at_least[sizeof(int)>=sizeof(int32_t)?1:-1];int

c++ - 对数字列表及其索引进行排序的最快方法

我有一个看似非常基本的问题,但它是在“每个CPU滴答声都很重要”(这是将在super计算机上使用的更大算法的一部分)的上下文中提出的。问题很简单:对unsignedlonglongint数字列表及其原始索引进行排序的最快方法是什么?(一开始,unsignedlonglongint数字是完全随机的。)Example:BeforeNumbers:32911172Indexes:0123AfterNumbers:11327291Indexes:2031我所说的“最快方式”是指:使用什么算法:std::sort、Cqsort或网络上可用的其他排序算法?使用什么容器(C数组、std::vecto

c++ - 对数字进行分组 C++

问题是:您有N个(N代表您拥有的数字的个数)个数字。将它们分成2组,以使各组中数字之和之间的差异最小。例子:5//N1,9,5,3,8//Thenumbers如果我们将1、9和3放入A组,将5和8放入B组,则差异为0。我想首先我应该计算所有数字的总和并将其除以2。然后检查所有可能的数字组合,其总和不高于所有数字总和的一半。执行此操作后,我将选择最大的数字并打印出组。我在遍历所有组合时遇到问题,尤其是当N是大数字时。如何遍历所有组合?此外,我的想法有点不同,我将按降序对数字进行分组,我会将最大的数字放在A组中,将最小的数字放在B组中。然后我反过来做。这适用于一些数字,但有时它不会显示最佳

C++ 函数返回对数组的引用

除了使用指针之外,还有其他方法可以从函数返回中接收对数组的引用吗?这是我的代码。intia[]={1,2,3};decltype(ia)&foo(){//or,int(&foo())[3]returnia;}intmain(){int*ip1=foo();//ok,andvisitarraybyip1[0]or*(ip1+0)autoip2=foo();//ok,thetypeofip2isint*intar[]=foo();//errorintar[3]=foo();//errorreturn0;}还有一个类版本。classA{public:A():ia{1,2,3}{}int(&f

c++ - 最小对数

在2D平面中给定2N个点,您必须将它们分组为N对,这样它们之间的距离总和所有对的点是可能的最小值。所需的输出只是总和。换句话说,如果a1,a2,..an分别是第一对,第二对...和第n对的点之间的距离,那么(a1+a2+...一个)应该是最小的。让我们考虑这个测试用例,如果2*5点是:{20,20},{40,20},{10,10},{2,2},{240,6},{12,12},{100,120},{6,48},{12,18},{0,0}期望的输出是237。这不是我的作业,我想知道不同的方法而不是蛮力。 最佳答案 您似乎在寻找Minim

c++ - 为什么对于基于 RB 树的 C++ std::set 的插入时间基准,我得到的是常数而不是对数曲线?

我在HeapvsBinarySearchTree(BST)比较BST和Heap但是当我尝试对两者进行基准测试并比较结果时,我无法解释BST的数据。首先,我确认标准库确实使用了红黑树:WhatistheunderlyingdatastructureofaSTLsetinC++?然后我运行了这个基准测试。主要.cpp#include#include#include#includeintmain(intargc,char**argv){size_ti,n;std::setbst;std::random_devicedev;unsignedintseed=dev();std::mt19937p

c++ - 如何编写 C++ 转换运算符返回对数组的引用?

在C++中,可以在类或结构中添加隐式转换运算符。例如,3Dvector类型通常包括如下内容:structVector{floatx,y,z;operatorfloat*(){returnreinterpret_cast(this);}};允许使用下标访问vector的元素,传递给需要指针的函数等。我想知道:我们是否可以编写一个转换运算符来返回对float数组的引用,而不是指向float?(这纯粹是出于学术兴趣。我不知道数组引用比简单指针有什么好处(如果有的话)。)作为一个免费的功能,我们可以这样做:float(&convert(Vector&v))[3]{returnreinterpr

windows - 使用 Windows 7 计算器计算对数

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭10年前。Improvethisquestion我想在科学模式下使用Windows计算器来求解一个非常基本的对数方程,但不幸的是,我做不到。问题是:log_5125=?非常感谢您的帮助...嗯,我知道它等于“3”,但是,我如何使用Windows计算器来计算这个等式?