Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在windows C++;_C++ - Fatal编程技术网

C++ 在windows C++;

C++ 在windows C++;,c++,C++,我写了一个程序,在10000000个数字的向量中找到一个数字,我想这是一个非常大的向量。但问题是我越来越 线性搜索所用时间等于0毫秒 当我搜索向量中的任何数字时。我所期望的是它应该以毫秒或秒为单位,尽管它是一个大的向量 任何帮助都将不胜感激 #include <iostream> #include <sys/time.h> #include <vector> #include <chrono> using namespace std; void

我写了一个程序,在10000000个数字的向量中找到一个数字,我想这是一个非常大的向量。但问题是我越来越

线性搜索所用时间等于0毫秒

当我搜索向量中的任何数字时。我所期望的是它应该以毫秒或秒为单位,尽管它是一个大的向量

任何帮助都将不胜感激

#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;icout查看已反汇编的程序。函数
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平均数。