Линейный поиск через вектор [i] yealds 0ms response, тогда как vector.at (i) yealds time
Я должен добавить: я звоню по моему линейному поиску 15 000 раз, и самый низкий диапазон, который я ищу, составляет до 50 000 с каждой итерацией. Таким образом, имеется смысл 15 000 * 50 000 просмотров на первой итерации. Это должно занять больше времени, чем 0 мс.
У меня есть этот основной линейный поиск:
bool linearSearch(std::vector<int>&primes, int number, int range) {
for (int i = 0; i < range; i++) {
if (primes[i] == number)
return true;
}
return false;
}
Я беру время, используя:
void timeLinearSearch(std::vector<int>& primes) {
clock_t start, stop;
size_t NRND = 15000; // 15000 primes per clock
for (int N = 50000; N <= 500000; N += 50000) // increase by 50k each iteration
{
for (int repeat = 0; repeat < 5; repeat++) {
start = clock();
for (int j = 0; j < NRND; j++) {
linearSearch(primes, rand(), N);
}
stop = clock();
std::cout << stop - start << ", " << N << std::endl;
}
}
}
Проблема в том, что время составляет 0 мс. Вектор «простые числа» содержит около 600 000 элементов, поэтому поиск остается в пределах досягаемости.
В линейном поиске, если я изменю:
if(primes[i] == number)
чтобы:
if(primes.at(i) == number)
тогда я получаю время> 0 для поиска.
Я сравнил свой линейный поиск с primes.at (i) с std :: find () следующим образом:
for (int j = 0; j < NRND; j++) {
std::find(primes.begin(), primes.begin() + N, rand());
}
и это примерно на 200 мс быстрее, чем мой .at () найти.
Почему мой поиск с помощью std :: vector [i] дает мне время 0 мс?