c++ - C++ 错误中的计时时间计数器问题:运算符不匹配
问题描述
#include <iostream>
#include <chrono>
#include <unistd.h>
using namespace std;
void SieveOfEratosthenes (int n)
{
bool prime[n+1], flag=true;
int counter=0, ct=0;
for (int i =0;i<n+1;i++){
prime[i]=true;
}
for (int p=2; p*p<=n; p++)
{
if (prime[p]==true)
{
for (int i=p*2; i<=n; i += p)
{
prime[i] = false;
}
}
}
// Print all prime numbers
for (int p=2; p<=n; p++)
{
if (flag)
{
auto begin=chrono::high_resolution_clock::now();
}
if (prime[p])
{
cout << p << " ";
counter+=1;
flag=false;
}
if(counter==10)
{
auto end=chrono::high_resolution_clock::now();
auto duration=chrono::nanoseconds(end-begin);
cout<<"Time elapsed:"<<duration.count();
counter=0;
flag=true;
}
}
cout<<endl;
}
int main()
{
int n;
cout<<"Type a number:";
cin>>n;
cout<<endl<<"Following are the prime numbers smaller or equal to:"<<n<<endl;
SieveOfEratosthenes(n);
return 0;
}
// Driver Program to test above function
这是一种查找小于 n 的素数(从键盘给出)的算法,我想每找到 10 个素数得到时间。我遇到操作员错误,它在(结束)。我不明白错误在哪里是。我试图在单独的 .o 文件中编写函数,但仍然一无所获。任何帮助将不胜感激。!
解决方案
begin
是在一个if
块内定义的,它不能被end-begin
. 一个简单的解决方法是将定义移出for
-loop:
decltype(chrono::high_resolution_clock::now()) begin;
// Print all prime numbers
for (int p=2; p<=n; p++)
{
if (flag)
{
begin=chrono::high_resolution_clock::now();
}
// ...
}
注意using namespace std
全局设置通常是个坏主意。由于begin
与 碰撞std::begin
,错误消息变得复杂。如果你改为 write namespace chrono = std::chrono; using std::cout;
,错误会变得更清楚:
test.cpp: In function ‘void SieveOfEratosthenes(int)’:
test.cpp:41:53: error: ‘begin’ was not declared in this scope; did you mean ‘std::begin’?
41 | auto duration=chrono::nanoseconds(end-begin);
| ^~~~~
| std::begin
推荐阅读
- r - 用残差与拟合图分析 R 中方差的同质性
- java - Java - 为什么将空格作为一个单词读入?
- php - Insert result in DB using laravel
- python - Create a 10 minute running average of data with uneven time steps
- gradle - Gradle多项目buildSrc在子项目中不起作用
- count - Excluding Values
- python - 使用 conda 安装 plotly 时遇到问题
- reactjs - 有没有办法在 firestore collection() 和 doc() 中使用 React 状态?
- xgboost - H2O XGBoost 因本地服务器死机或挂起而崩溃(?)
- c# - URL重写是用两个段重写我的所有文件