【发布时间】:2018-08-12 06:47:15
【问题描述】:
当我想将它与 C++ 进行比较时,我正在使用 Java 中的一些 FizzBuzz 代码。
我在 Java 中运行了下面的代码,在 C++ 中运行了基本相同的代码。
Java Eclipse IDE 运行时:11 秒
C++ 代码块 IDE 运行时:202 秒(比 Java 慢约 18 倍)
C++ Visual Studio IDE 运行时:281 秒(大约比 Java 慢 25 倍)
据我所知,我已经安装了所有这些 IDE 的最新版本。
为什么会这样?我所掌握的每一条信息都表明 C++ 应该运行得更快。
Java 代码:
public class Test {
public static void main(String []args) {
double fizzes = 0;
double buzzes = 0;
double fizzbuzzes = 0;
double normals = 0;
double iterations = 1000000;
for (int x = 0; x < iterations; x++) {
int index = 0;
String output = "";
if (x % 3 == 0) {
output = output + "Fizz";
index = 1;
}
if (x % 5 == 0) {
output = output + "Buzz";
index = index + 2;
}
if (output == "") { //x%5!=0 && x%3!=0
System.out.println(x);
normals++;
}
else {
System.out.println(output);
}
if (index == 3) {
fizzbuzzes++;
}
else if (index == 2) {
buzzes++;
}
else if (index == 1) {
fizzes++;
}
}
System.out.println("Normals " + (normals/iterations*100) + "%"); //percent
System.out.println("Fizzes " + (fizzes/iterations*100)+ "%");
System.out.println("Buzzes " + (buzzes/iterations*100)+ "%");
System.out.println("FizzBuzzes " +(fizzbuzzes/iterations*100)+ "%");
}
}
C++ 代码:
#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
double fizzes = 0;
double buzzes = 0;
double fizzbuzzes = 0;
double normals = 0;
double iterations = 1000000;
for (int x = 0; x < iterations; x++) {
int index = 0;
string output = "";
if (x % 3 == 0) {
output = output + "Fizz";
index = 1;
}
if (x % 5 == 0) {
output = output + "Buzz";
index = index + 2;
}
if (output == "") { //x%5!=0 && x%3!=0
cout << x<< endl;
normals++;
}
else {
cout << (output)<< endl;
}
if (index == 3) {
fizzbuzzes++;
}
else if (index == 2) {
buzzes++;
}
else if (index == 1) {
fizzes++;
}
}
cout << "Normals " << (normals / iterations * 100) <<"%"<< endl; //percentage
cout << "Fizzes " << (fizzes / iterations * 100) << "%" << endl;
cout << "Buzzes " << (buzzes / iterations * 100) << "%" << endl;
cout << "FizzBuzzes " << (fizzbuzzes / iterations * 100) << "%" << endl;
return 0;
}
这只是给出了 Fizz/Buzzes 的百分比计数。
这只是我的 IDE 配置的结果吗?
编辑:将 C++ 代码更改为您的建议
#include "stdafx.h"
#include <iostream>
#include <string>
int main()
{
double fizzes = 0;
double buzzes = 0;
double fizzbuzzes = 0;
double normals = 0;
double iterations = 1000000;
for (int x = 0; x < iterations; x++) {
int index = 0;
std::string output = "";
if (x % 3 == 0) {
output = output + "Fizz";
index = 1;
}
if (x % 5 == 0) {
output = output + "Buzz";
index = index + 2;
}
if (index == 3) {
fizzbuzzes++;
}
else if (index == 2) {
buzzes++;
}
else if (index == 1) {
fizzes++;
}
if (output == "") { //x%5!=0 && x%3!=0
//std::cout << x << "\n";
normals++;
}
//else {
// std::cout << output << "\n";
//}
}
std::cout << "Normals " << (normals / iterations * 100) <<"%"<< "\n"; //percentage
std::cout << "Fizzes " << (fizzes / iterations * 100) << "%" << "\n";
std::cout << "Buzzes " << (buzzes / iterations * 100) << "%" << "\n";
std::cout << "FizzBuzzes " << (fizzbuzzes / iterations * 100) << "%" << "\n";
int z;
std::cin >> z; //so i can see the values
return 0;
}
还可以在发布模式下构建,并且在 IDE 之外它几乎可以立即运行。 似乎打印需要很多时间。
【问题讨论】:
-
你是如何编译你的 C++ 的?您是否使用了任何优化标志?如果您的编译器为了调试目的而避免大多数优化并发出一些东西,那么讨论速度是没有意义的。
-
也许你没有在发布模式下构建你的程序,或者在没有任何优化的情况下构建它。您还应该尝试在您的 IDE 之外运行您的代码 - 您的程序会产生大量文本输出,并且某些 IDE 可能会花费大量时间来显示所有这些输出,而不是让您的程序尽可能快地运行。 (你的 C++ 程序需要 5 秒才能在我的机器上完成..)
-
第一步:关闭:sync_with_stdio
-
而不是
endl使用'\n' -
std::endl 是邪恶的
标签: java c++ eclipse optimization visual-studio-2017