更快地迭代范围

时间:2015-12-08 21:25:43

标签: c++

我是一名有竞争力的程序员,而且我一直在问自己是否有更短,更优雅的写作方式for(int i=0; i<n; ++i)。我只能使用标准C ++,没有其他库。

4 个答案:

答案 0 :(得分:1)

在c ++比赛中,有一组众所周知的宏(不要在商业项目中使用它)。您还要求更优雅的解决方案(这是众所周知的解决方案,但肯定不会更优雅)

例如,请阅读此topcoder网站:

#define REP(x, n) for(int x = 0; x < (n); ++x)

然后在代码中你可以简单地写

REP(i,n){
}

我发现了一个基本的完整标题:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
typedef vector<int> VI;
typedef long long LL;
#define FOR(x, b, e) for(int x = b; x <= (e); ++x)
#define FORD(x, b, e) for(int x = b; x >= (e); – –x)
#define REP(x, n) for(int x = 0; x < (n); ++x)
#define VAR(v, n) typeof(n) v = (n)
#define ALL(c) (c).begin(), (c).end()
#define SIZE(x) ((int)(x).size())
#define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)
#define PB push_back
#define ST first
#define ND second

答案 1 :(得分:0)

如果没有运行定时测试,我会假设两者:

for(int i=0; i<n; ++i)

int i=0;
while (i<n)
{
    i++
}

在时间上非常接近。也许在运行两种类型的循环的程序中使用时间戳,并查看每种类型的整体时间/循环。

这些是C / C ++的基本循环结构,所以我认为不会有更快速运行的东西(但如果我学到新东西,我愿意出错)

答案 2 :(得分:0)

看到你没有说明是否需要使用i如何[1]:

int i=n+1; while(--i);

它更短!

[1]未被证明是正确的。

答案 3 :(得分:0)

我也是一个有竞争力的程序员。这个答案可能是题外话,但我认为它将提供一些有用的想法。

我个人认为,您不应该关注这些类型的问题。我认为写ggplot(df, aes(x, y)) + geom_smooth( method = 'glm', formula = y ~ x, method.args = list(family = gaussian(link = 'log')) ) + geom_point() for (int i = 1; i <= n; ++i)之间并没有太大区别。第一个显然很短,并且打字所需的时间更少,但是一旦达到足够高的水平,解决问题的技能就比打字速度重要得多。不相信我吗查看游客代码。

我认为您应该集中精力提高解决问题的能力。最好的方法是解决尽可能多的问题。这样做也会增加打字速度。