C++ 在windows C++;
我写了一个程序,在10000000个数字的向量中找到一个数字,我想这是一个非常大的向量。但问题是我越来越 线性搜索所用时间等于0毫秒 当我搜索向量中的任何数字时。我所期望的是它应该以毫秒或秒为单位,尽管它是一个大的向量 任何帮助都将不胜感激C++ 在windows C++;,c++,C++,我写了一个程序,在10000000个数字的向量中找到一个数字,我想这是一个非常大的向量。但问题是我越来越 线性搜索所用时间等于0毫秒 当我搜索向量中的任何数字时。我所期望的是它应该以毫秒或秒为单位,尽管它是一个大的向量 任何帮助都将不胜感激 #include <iostream> #include <sys/time.h> #include <vector> #include <chrono> using namespace std; void
#include <iostream>
#include <sys/time.h>
#include <vector>
#include <chrono>
using namespace std;
void search(vector<int>& num , int key)
{
for(int i = 0; i < num.size(); i++)
{
if(num[i] == key)
{
cout << "Found" << endl;
break;
}
}
}
int main()
{
vector<int> num;
for(int i= 0; i < 100000; i++)
num.push_back(i);
cout << "Enter the key : " ;
int key;
cin >> key;
typedef std::chrono::high_resolution_clock Time;
typedef std::chrono::milliseconds ms;
typedef std::chrono::duration<float> fsec;
auto t0 = Time::now();
//struct timeval t1, t2;
//gettimeofday(&t1, NULL);
search(num , key);
//gettimeofday(&t2, NULL);
//double timeDiff = (t2.tv_sec - t1.tv_sec)*1000.0 + (t2.tv_usec - t1.tv_usec)/1000.0;
//cout << "Time taken for linear search " << timeDiff << " ms" << endl;
auto t1 = Time::now();
fsec fs = t1 - t0;
ms d = std::chrono::duration_cast<ms>(fs);
std::cout << fs.count() << "s\n";
std::cout << d.count() << "ms\n";
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
无效搜索(矢量和数值,整数键)
{
对于(int i=0;i cout查看已反汇编的程序。函数search
不返回任何内容,也不更改任何内容,因此编译器决定删除求值,从而完全删除循环。函数体变为空,其调用被删除。您可能应该使用std::chrono
。不工作,再次获得0秒0毫秒在中。Windows提供的默认最小时间增量因版本而异,可以通过系统调用进行修改。它过去是1/64秒,大约15毫秒,但我在Windows中没有做足够的高精度计时来了解这些天的默认值。不过,我不希望超过1毫秒,而且一台多GHz的计算机可能会崩溃ugh 1000万vector
元素非常快。您是否使用任何优化标志编译代码?将您的代码放在这里并使用-O3(gcc)编译,您将看到,search
函数从未被调用。添加bool作为搜索的返回值,计算找到的键数,然后打印此值,在这种情况下,必须调用search
,您可以测量时间。我没有使用任何优化标志,我的函数被调用,也就是为什么我得到“find”正如所能。函数调用没有变为空,因为我得到了“find”当我在上面的程序中输入99999作为密钥时,是cout。不要欺骗我和其他人。你已经更新了你的原始问题。是的,在你的评论之后,我添加了cout来验证。并且你减少了向量大小。100000是一个小尺寸。找出并可能更改计时器刻度。运行你的实验几千次,然后计算a平均数。