草庐IT

评估器

全部标签

algorithm - 依赖评估的 DAG 的最佳内存跟踪

我正在寻找一种算法来优化DAG上的评估顺序,从而使用最少的内存。这可能有点难以解释,所以我将举例说明我的意思。假设您有一个具有多个根的DAG,它表示某种形式的依赖评估顺序。因此,每个子节点只有在其父节点执行后才能执行其操作。此外,我们可以从内存中释放不再需要的每个节点。任务是找到最佳的评估顺序计划,以便在任何时候使用最少的内存。例如考虑下图:还有两个时间表:loadA-1nodeinmemoryloadB-2evalC-3evalD-4evalF-5unloadC-4evalH-5unloadA,F-3evalE-4evalG-5unloadD,E-3evalI-4unloadB,G-

用于评估数学/算术表达式的 C++ 仿函数库

有没有人知道一个库可以让你做这样的事情?std::transform(vecA.begin(),vecA.end(),vecB.begin(),vecOutput.begin(),//run-timespecifiedexpressionmagic_functor("exp(a/(b+3))"));其中magic_functor是库提供的仿函数,a和b通过vecA和vecB迭代。我可以自己想出一些东西(这样做会很有趣),但最好避免重新发明轮子(我的老板也会杀了我)。花了一些时间在网上搜索,但找不到任何符合要求的内容。它需要灵活且快速,因此只解析字符串一次(例如在构造时在内部创建执行堆栈

c++ - 在编译时是否需要短路评估规则?

程序A产生编译错误(如预期的那样),因为isFinite是用非整数类型调用的。程序A#includeclassFoo{};templateboolisFinite(constT&t){static_assert(std::is_integral::value,"CalledisFinitewithanon-integraltype");returnfalse;}intmain(){Foof;std::cout但是,稍作修改(请参阅程序B)允许程序编译(VisualStudio2013)并产生以下输出。程序BVisualStudio2013输出Foo是有限的?是的方案B#includec

c++ - 学习嵌入式 C/C++ 开发的最佳评估套件是什么?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter寻求指导。关闭10年前。我正在尝试改进基于ARM架构的嵌入式C/C++开发。我最近从68K开发转到了ARM,想利用我的一些空闲时间深入研究该平台并学习最佳实践,尤其是针对移动平台的开发。最好是32位架构,这将有助于支持开发工具。学习过程中的一点乐趣可能会加深我对平台的理解 最佳答案 似乎有很多有趣的事情正在使用Ardui

c++ - 参数评估后是否对参数绑定(bind)进行排序?

假设我有以下功能:voidfoo(std::vectorvec,intn);如果我这样调用函数:std::vectornumbers{2,3,5,7,11,13,17,19};foo(std::move(numbers),numbers[0]);在绑定(bind)到参数之前,是否所有参数都已完全评估?在这种情况下,std::move是无害的,因为它只是产生一个引用numbers的xvalue。或者每个单独的参数是否可以在评估后立即绑定(bind)到它的参数?在这种情况下,numbers[0]可能会导致未定义的行为,因为numbers可能已经被move到vec中。

c++ - 括号是否强制评估顺序并定义未定义的表达式?

当我遇到这个问题时,我正在阅读我的教科书:Whatwouldbethevalueofaafterthefollowingexpression?Assumetheinitialvalueofa=5.Mentionthesteps.a+=(a++)+(++a)起初我认为这是未定义的行为,因为a已被多次修改。然后我读了这个问题,上面写着“提到步骤”,所以我可能认为这个问题是对的。应用括号是否定义了未定义的行为?在计算括号表达式后是否创建了序列点?如果定义了,那么括号有什么关系,因为++和()具有相同的优先级? 最佳答案 不,应用括号不会使

c++ - C++14/17 中的延迟评估 - 只是 lambdas 还是 future 等?

我刚刚读到:LazyEvaluationinC++并注意到它有点旧,而且大多数答案都是关于2011年之前的C++。现在我们有语法lambdas,它甚至可以推断返回类型,所以惰性求值似乎可以归结为只是传递它们:而不是autox=foo();你执行autounevaluted_x=[](){returnfoo();};然后评估您需要的时间/地点:autox=unevaluted_x();似乎没有更多的东西。但是,answersthere之一建议使用futures与异步启动。有人可以用C++或更抽象地说明为什么/如果future对于惰性评估工作很重要吗?似乎future很可能会被急切地评估,

c++ - 宏观评估顺序

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:#and##inmacros为什么第二个printf的输出是f(1,2)计算宏的顺序是什么?#include#definef(a,b)a##b#defineg(a)#a#defineh(a)g(a)intmain(){printf("%s\n",h(f(1,2)));printf("%s\n",g(f(1,2)));return0;}output12f(1,2) 最佳答案 来自http://gcc.gnu.org/onlinedocs/cpp/Argume

c++ - 重载逗号运算符*真的*会影响其操作数的评估顺序吗?

逗号运算符保证从左到右的评估顺序。[n3290:5.18/1]:Thecommaoperatorgroupsleft-to-right.expression:assignment-expressionexpression,assignment-expressionApairofexpressionsseparatedbyacommaisevaluatedleft-to-right;theleftexpressionisadiscardedvalueexpression(Clause5).Everyvaluecomputationandsideeffectassociatedwithth

c++ - 懒惰评估(短路)模板条件类型的通用方法

在玩弄编译时字符串(char的可变参数列表)操作时,我需要实现一种方法来检查编译时字符串是否包含另一个(较小的)编译时字符串。这是我的第一次尝试:templatestructContains;templatestructContains,CharList>{usingL1=CharList;usingL2=CharList;staticconstexprintsz1{L1::size};staticconstexprintsz2{L2::size};usingType=std::conditional=sz1),std::false_type,std::conditional()!=L