草庐IT

kkt条件

全部标签

c++ - 在循环的停止条件下访问数组值是否安全?

为了提高我的clique-partitioning程序的性能,它使用有序数组,我在for循环的停止条件中加入了对我正在循环进入的数组元素的访问。intmyValue=13;for(inti=0;array[i]这显然是不安全的,因为我的数组可能只包含小于myValue的值,所以我尝试了这个intmyValue=13;for(inti=0;i在这个实现中,一切似乎都很顺利,但是如果我切换条件,我就会陷入第一个例子的同样问题。intmyValue=13;for(inti=0;array[i]所以,我推断这显然是由于编译器设置两个条件的顺序的方式,因为在最后一种情况下,即使我要求仅当i是时才

c++ - 附加条件语句使程序更快

看完Whyisitfastertoprocessasortedarraythananunsortedarray?,我在主循环中添加了一个额外的测试。似乎这个额外的测试使程序更快。intmain(){//GeneratedataconstunsignedarraySize=32768;intdata[arraySize];for(unsignedc=0;c=128)sum+=data[c];//Withthisadditionaltest,executionbecomesfasterif(data[c](clock()-start)/CLOCKS_PER_SEC;std::cout通过附

构建一个条件到时间的数据框

我正在尝试构建一个名为“DF”的数据框,该数据框在输入每一行时会记录时间戳。“DF”应该具有独特的列:我想在“DF”中输入的数据来自数据框“A”,列“textid”:str(a$textid)chr[1:262]“xxxxxyyy”...'a'的组成为:str(a)'data.frame':262obs。3个变量:$v1:Chr“Refierenosalguienquecompreoarriende,siconcretagerténuningresofreexfreex\ngoo.gl/olpyuz“”Refierenosalguienquecompreoarriende,siconcreta

c++ - 为什么将条件写入转换为无条件写入不是线程安全优化?

在关于并发性和C++11内存模型的演讲中,HerbSutter给出了非法优化的示例。http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Herb-Sutter-atomic-Weapons-2-of-2第17分钟的幻灯片:voidf(vector&v){if(v.length()>0)xMutex.lock();for(inti=0;i0)xMutex.unlock();}“很可能(如果有严重缺陷的话)中央循环的转变:”r1=x;for(inti=0;i他解释说,“......这个写入不是有条件的,即使doOpti

c++ - 如果繁重的计算函数位于循环的条件部分,运行时间是否会有所不同?

如果在循环的条件部分进行繁重的计算,运行时间是否会有所不同?例如:inti,n;for(i=1;i或者inti,n,foo;foo=[calltosomecomplexfunctiononn];for(i=1;i哪个更有效率?循环是计算一次还是每次迭代都计算一次? 最佳答案 是的,for循环的条件部分中提供的函数会有“性能损失”除非函数是const并且编译器可以将其缩减到一个常数值。编译器需要为每次迭代调用该函数。我强烈建议在进入循环之前将函数的结果放入常量临时变量中。例子:constunsignedintlimit=my_vect

c++ - 条件中的迭代器赋值 - vector 迭代器不兼容

我有一个用于std::vector的包装器,我已经实现了用另一个vector替换一个vector中的部分的函数。我试图将迭代器的赋值直接放在if条件中,但得到了意想不到的结果。我正在使用VisualStudio2013并且定义了FAIL我得到了DebugAssertionFailed!-vector迭代器不兼容。是否有可能从右到左评估条件?我无法克服它。这是一个(实现不佳的)代码,它重现了我的问题-旨在用vec_second的第一个和第二个元素替换vec的第3个和第4个元素:#include#include#includeusingstd::cout;//#defineFAILintm

c++ - C族语言if语句中2乘2条件的排列

在编程时,我通常会同时处理两组条件,例如:if(A&&B){...}elseif(!A&&B){...}elseif(A&&!B){...}elseif(!A&&!B){...}它也可以使用嵌套的if语句来解决。if(A){if(B){...}else{...}}else{if(B){...}else{...}}编辑:一些新的想法,如果A和B的评估都没有副作用?所以我的问题是它们之间有任何性能差异以及它们的可读性如何?如果重要的话,我会用C++编写代码。 最佳答案 这两种情况并不相同。在第二种情况下,A和B将分别被计算一次。在第一种

c++ - if constexpr(condition) 作为编译时条件

我想使用constexprbool(下例中的useF)来启用以下代码中的功能。在这里,调用A::f()。此外,我想将别名模板(a)设为void,以防我关闭该功能。我尝试使用constexprif语句,但主体仍在实例化,这导致编译错误。如果我使用包装器模板(X),正文将按照我的预期被丢弃,但这对我来说似乎很难看。还有其他方法吗?constexprbooluseF=false;structA{staticvoidf(){}};usinga=std::conditional::type;templatestructX{staticvoidh(){ifconstexpr(std::is_sam

c++ - 竞争条件的棘手情况

我有一个音频播放类的竞争条件,每次我开始播放时我将keepPlaying设置为true,而false当我停下来。问题发生在我开始后立即停止(),并且keepPlaying标志设置为false,然后重置为true再次。我可以延迟stop(),但我认为这不是一个很好的解决方案。我是否应该使用条件变量让stop()等待直到keepPlaying为true?您通常会如何解决这个问题?#include#includeusingnamespacestd;classAudioPlayer{boolkeepRunning;threadthread_play;public:AudioPlayer(){k

c++ - 类定义中的条件

我正在尝试做类似的事情:#pragmaonce#include#include#includeclassB{}templateclassA{private:std::vector>ptrVector;public:A();voidpushBack(std::shared_ptrt);if(std::is_same::value){voiddoSth();}~A(){};};是否有可能以某种方式实现这样的条件?不,我不能继承这个类,只有在A时才需要doSth(),如果AdoSth()不应该存在. 最佳答案 您可以使用std::enab