gpt4 book ai didi

c++ - C++在程序执行中有cout和没有cout的时差

转载 作者:行者123 更新时间:2023-12-01 14:43:07 27 4
gpt4 key购买 nike

我在一个编程博客上读到,带有大量print语句的程序需要更多时间才能完成其执行,因为它必须将数据连续发送到输出缓冲区。我正在解决ProjectEuler问题#12。我已经成功解决了。以下是代码

#include <iostream>
#include <ctime>
#include <boost/multiprecision/cpp_int.hpp>
using big_int = boost:: multiprecision:: cpp_int;
using namespace std;
clock_t start = clock();
big_int get_num(big_int num) {
return num*(num + 1) / 2;
}

big_int num_of_factors(big_int num) {
big_int count = 0;
for(big_int i = 1; i <= sqrt(num); ++i) {
if(num % i == 0) {
if(num / i == i)
count += 1;
else
count += 2;
}
}
return count;
}
int main() {
big_int num = 1;
while(true) {
if(num_of_factors(get_num(num)) >= 500) {
cout << get_num(num);
break;
}
++num;
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
return 0;
}
时间流逝:
/ home / arun / CLionProjects / DebugTutorial / cmake-build-debug / DebugTutorial
76576500
时间是106.029秒
流程结束,退出代码为0
这是第二个片段。请注意++ num之后的 cout中的 main()语句
#include <iostream>
#include <ctime>
#include <boost/multiprecision/cpp_int.hpp>
using big_int = boost:: multiprecision:: cpp_int;
using namespace std;
clock_t start = clock();
big_int get_num(big_int num) {
return num*(num + 1) / 2;
}

big_int num_of_factors(big_int num) {
big_int count = 0;
for(big_int i = 1; i <= sqrt(num); ++i) {
if(num % i == 0) {
if(num / i == i)
count += 1;
else
count += 2;
}
}
return count;
}
int main() {
big_int num = 1;
while(true) {
if(num_of_factors(get_num(num)) >= 500) {
cout << get_num(num);
break;
}
++num;
cout << get_num(num) << endl; //Notice this
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
cout << endl << "Time is " << elapsedTime << " Seconds";
return 0;
}
时间流逝:
时间是110.946秒
流程结束,退出代码为0
我确切想知道的是为什么这两个代码的执行时间之间没有显着差异。在另一个版本中有一个 print语句。
例如,
查看以下代码:
1)没有 print语句:
#include <iostream>
#include <ctime>
#include <boost/multiprecision/cpp_int.hpp>
using big_int = boost:: multiprecision:: cpp_int;
using namespace std;
clock_t start = clock();

int main() {
for(big_int i = 0; i < 10000000; ++i) {
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
cout << endl << "Time is " << elapsedTime << " Seconds";
return 0;
}
执行时间处理时间:
时间是0.370125秒
2)用 print语句
#include <iostream>
#include <ctime>
#include <boost/multiprecision/cpp_int.hpp>
using big_int = boost:: multiprecision:: cpp_int;
using namespace std;
clock_t start = clock();


int main() {
for(big_int i = 0; i < 10000000; ++i) {
cout << i << endl;
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
cout << endl << "Time is " << elapsedTime << " Seconds";
return 0;
}
执行时间处理时间:
时间是26.8947秒
我想知道像这两个代码一样,为什么ProjectEuler解决方案代码中提到的代码的执行时间没有显着差异。

最佳答案

正如@Blastfurnace在另一个与此相关的问题中所发布的。
原因是在这里我正在比较一个空循环和一个打印某些内容的循环。没有工作与一些工作。我以前的代码比较了执行大量工作的循环和执行相同工作但添加单个print语句的循环。我在其他代码中的运行时间由计算决定,而不是由单个附加打印决定。

关于c++ - C++在程序执行中有cout和没有cout的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61065877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com