草庐IT

if-condition

全部标签

c++ - 与默认 IF 相比,简写 IF 是否会提高效率?

如果我有一个包含任意长度整数的大型数据文件,需要按它的第二个字段进行排序:13451457-134567124583941384-193819483848089-1485001048018401039888//considerthisisaLARGEfile,thedatagoesonforquitesometime我呼吁qsort成为我的首选武器,在我的排序函数中,使用速记IF是否会显着提高数据排序所需的总时间?还是简写IF只是为了方便组织代码?num2=atoi(Str);num1=atoi(Str2);LoggNum=(num2>num1)?num2:num1;//faster?

algorithm - 网格简化 : Edge Collapse Conditions

我正在尝试通过进行一系列边缘折叠来实现网格简化算法。目前,我正在遍历每个三角形,然后折叠最短边,算法稳定(不会越界)。但在一定程度上,它开始创建破损(孔)工件。确定边是否可折叠以使其不会导致非流形工件(或网格)的正确方法是什么?注意:我使用的是半边数据结构。此外,我不想使用任何外部库,如OpenMesh或CGAL。我有不使用它们的理由。 最佳答案 边缘塌陷有两个主要条件:连通性在折叠边的每一侧,只有一对边必须合并。这可以通过计算两个合并顶点的联合相邻顶点来检查(必须恰好有两个)。考虑以下红色边缘折叠的示例:橙色和青色边缘之间的三角形

c++ - 使用超过 50 个 OR ( || ) 优化 if 语句

好的,我正在做一些涉及键盘输入的事情。我现在有一个像这样的巨大功能:returnkey==BB_KEY_SPACE||key==BB_KEY_ZERO||key==BB_KEY_ONE||key==BB_KEY_TWO||key==BB_KEY_THREE||key==BB_KEY_FOUR||key==BB_KEY_FIVE||key==BB_KEY_SIX||key==BB_KEY_SEVEN||key==BB_KEY_EIGHT||key==BB_KEY_NINE||key==BB_KEY_A||key==BB_KEY_B||key==BB_KEY_C||key==BB_KEY_

C++ std::enable_if

我对std::enable_if很陌生,想知道如何使用它。我有一个模板类:templateclassfoo{}现在我只想在a+b等于10时实例化它。我可以使用std::enable_if使这成为可能吗?第二个问题:如果我在类foo中有一个成员templateclassfoo{intc;}我只想在什么时候有ca=5.我如何使用std::enable_if做到这一点?这是使用std::enable_if的正确情况吗? 最佳答案 template::type>classfoo{};这应该可以完成工作;只需确保在实例化模板时永远不会显式提供

c++ - 相同的 C++ 'if' 语句,在 Linux/Windows 上的结果不同

我发现了一个有趣的案例,即相同的C++代码在不同的系统上产生不同的结果。#includeintmain(){inta=20,b=14;if(a*1.0/b*(a+1)/(b+1)==2)printf("YES!");elseprintf("NO!");}使用GCC4.6.3在UbuntuLinux12.04上编译它输出YES!使用GCC4.6.2在Windows7上编译它输出NO!但是,使用:doublec=a*1.0/b*(a+1)/(b+1);if(c==2)printf("YES!");...将在两台机器上返回YES!。知道为什么会出现这种差异吗?这是由编译器版本不匹配引起的吗(

c++ - if 条件的更好算法

我有一个代码,其中包含boolfn(){...//allthefollowingarebooleanfunctions.returnisTrue()&&isMsgReceived()&&isMsgSent();}问题在于每个返回的bool函数本身都非常冗长并且需要大量计算。实际上,如果前一个函数已经失败(和条件),则检查后续函数没有意义。您能否建议更简单的方法来返回false,以防万一开始的函数之一已经失败并且不再进行进一步检查。目的是减少计算时间。 最佳答案 &&已经为您做到了。如果isTrue()返回false,则不会评估接下来

c++ - C/C++ 编译器会优化这个 if 语句吗?

我有这样的代码,但我觉得它有点难读://code1if((expensiveOperation1()&&otherOperation()&&foo())||(expensiveOperation2()&&bar()&&baz()){//dosomething}我只是将其更改为以下内容,以使其更具可读性://code2constboolexpr1=expensiveOperation1()&&otherOperation()&&foo();constboolexpr2=expensiveOperation2()&&bar()&&baz();if(expr1||expr2){//oneof

c++ - boost mutex, condition, scoped_lock ,我在这里用错了吗?

classMyClass{public:voidPushMessage(MyMessagem)//Thread1callsthis{boost::mutex::scoped_locklock(mMutex);mQueue.push_back(m);mCondition.notify_one();}MyMessagePopMessage(){boost::mutex::scoped_locklock(mMutex);while(mQueue.empty())mCondition.wait(lock);MyMessagemessage=mQueue.front();mQueue.pop_f

c++ - 无法在 VS 14 CTP : conditional expression of type 'void' is illegal 中使用 auto 声明 lambda

使用VisualStudio2014CTP、C++(v140)编译器:autogp=[&](BYTE*buff){autogp1=[](char*bff,char**p1){*p1=strstr((char*)bff,"(");return(*p1);};};错误:conditionalexpressionoftype'void'isillegal(也许auto真的输入错误?)如果我将内部lambda声明为std::functiongp1然后就可以了是我做错了什么还是编译器错误? 最佳答案 我没有运行2014,但您可能需要指定内部l

C++, 'if' 表达式中的变量声明

这是怎么回事?if(inta=Func1()){//Works.}if((inta=Func1())){//Failstocompile.}if((inta=Func1())&&(intb=Func2()))){//Dostuffwithaandb.//ThisiswhatI'dreallyliketobeabletodo.}2003标准中的第6.4.3节解释了在选择语句条件中声明的变量如何具有扩展到条件控制的子语句末尾的范围。但我看不出它在哪里说了不能在声明两边加上括号,也没有说每个条件只能有一个声明。即使在条件中只需要一个声明的情况下,这种限制也很烦人。考虑一下。boola=fal