相关疑难解决方法(0)

为什么处理排序数组比处理未排序数组更快?

这是一段看似非常特殊的C++代码.出于某种奇怪的原因,奇迹般地对数据进行排序使得代码几乎快了六倍.

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned c = 0; c < arraySize; ++c)
        data[c] = std::rand() % 256;

    // !!! With this, the next loop runs faster.
    std::sort(data, data + arraySize);

    // Test
    clock_t start = clock();
    long long sum = 0;

    for (unsigned i = 0; i < 100000; ++i)
    {
        // Primary loop
        for (unsigned c = 0; c < arraySize; ++c) …
Run Code Online (Sandbox Code Playgroud)

c++ java optimization performance branch-prediction

2万
推荐指数
27
解决办法
142万
查看次数

什么是C++ 11中的lambda表达式?

什么是C++ 11中的lambda表达式?我什么时候用?他们解决了哪些问题在引入之前是不可能的?

一些示例和用例将是有用的.

c++ lambda c++-faq c++11

1408
推荐指数
7
解决办法
45万
查看次数

什么是C的三元运算符的惯用Go?

在C/C++(以及该系列的许多语言)中,根据条件声明和初始化变量的常用习惯用法是使用三元条件运算符:

int index = val > 0 ? val : -val
Run Code Online (Sandbox Code Playgroud)

Go没有条件运算符.实现上述相同代码的最惯用方法是什么?我来到以下解决方案,但它似乎相当冗长

var index int

if val > 0 {
    index = val
} else {
    index = -val
}
Run Code Online (Sandbox Code Playgroud)

还有更好的东西吗?

ternary-operator go conditional-operator

248
推荐指数
10
解决办法
15万
查看次数

要三元还是不三元?

我个人是三元运算符的拥护者:()?:; 我确实意识到它有它的位置,但我遇到了许多完全反对使用它的程序员,而且有些人经常使用它.

你有什么感受?你看到了什么有趣的代码?

multilingual ternary-operator conditional-operator

180
推荐指数
17
解决办法
4万
查看次数

为什么条件移动不易受分支预测失败的影响?

在阅读了这篇文章后(在StackOverflow上回答)(在优化部分),我想知道为什么条件移动不容易受到分支预测失败的影响.我在一篇关于cond移动的文章中找到了(PDF由AMD提供).在那里,他们声称cond的性能优势.移动.但为什么会这样呢?我没有看到它.在评估ASM指令的时刻,前面的CMP指令的结果尚未知晓.

谢谢.

optimization performance assembly cpu-architecture branch-prediction

72
推荐指数
4
解决办法
1万
查看次数

C中的三元(条件)运算符

条件运算符需要什么?在功能上它是多余的,因为它实现了if-else结构.如果条件运算符比等效的if-else赋值更有效,为什么编译器不能更有效地解释if-else?

c operators ternary-operator conditional-operator

53
推荐指数
9
解决办法
10万
查看次数

三元条件和赋值运算符优先级

我对直接赋值和三元条件运算符优先级感到困惑:

#include<stdio.h>
int main(void)
{
    int j, k;

    j = k = 0;
    (1 ? j : k) = 1; // first
    printf("%d %d\n", j, k);

    j = k = 0;
    1 ? j : k = 1; // second
    printf("%d %d\n", j, k);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

1 0
1 0
Run Code Online (Sandbox Code Playgroud)

但它碰巧是:

1 0
0 0
Run Code Online (Sandbox Code Playgroud)

另外我得到这个警告:

main.cpp:20:warning:语句无效

这是我评论的第二行.

由于直接赋值运算符的优先级低于三元条件运算符,因此我期望将第一行和第二行注释为等效的行.但实际情况并非如此.

我用g ++ --version(Ubuntu 4.4.3-4ubuntu5)4.4.3尝试了这个

c++ conditional-operator operator-precedence

32
推荐指数
3
解决办法
6885
查看次数

三元运算符与if语句的漂亮

我正在浏览一些代码,我发现了一些三元运算符.这段代码是我们使用的库,它应该非常快.

我在想,除了那里的空间,我们还要保存任何东西.

你有什么经历?

c++ if-statement ternary-operator

25
推荐指数
4
解决办法
3万
查看次数

简写c ++ if else语句

所以我很好奇是否有一个简短的声明:

if(number < 0 )
  bigInt.sign = 0;
else
  bigInt.sign = 1;
Run Code Online (Sandbox Code Playgroud)

如果a <b等,我会看到所有这些简短陈述.

我不确定如何正确地做到这一点,并希望得到一些意见.

谢谢!

我实际上只是在你们回答之前弄明白了.

我正在使用 bigInt.sign = (number < 0) ? 1 : 0

c++ if-statement

16
推荐指数
3
解决办法
8万
查看次数

C语言中If-Else和Ternary运算符之间的速度差异?

因此,在一位同事的建议下,我刚刚测试了三元运算符和等效的If-Else块之间的速度差异......似乎三元运算符产生的代码比If-Else快1到2倍.我的代码是:

  gettimeofday(&tv3, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     if(a) a = b; else a = c;
  }
  gettimeofday(&tv4, 0);


  gettimeofday(&tv1, 0);
  for(i = 0; i < N; i++)
  {
     a = i & 1;
     a = a ? b : c;
  }
  gettimeofday(&tv2, 0);
Run Code Online (Sandbox Code Playgroud)

(抱歉使用gettimeofday而不是clock_gettime ......我会尽力改善自己.)

我尝试改变我对块进行计时的顺序,但结果似乎仍然存在.是什么赋予了?此外,If-Else在执行速度方面表现出更多的可变性.我应该检查gcc生成的程序集吗?

顺便说一句,这都是在优化级别零(-O0).

我是在想象这个,还是有些东西我没有考虑到,或者这是机器相关的东西,还是什么?任何帮助表示赞赏.

c++ performance ternary-operator

11
推荐指数
3
解决办法
1万
查看次数