2016-02-07 2 views
-6

В настоящее время я пишу метод линейного поиска для поиска по вектору, но он возвращает true для каждого элемента в векторе. Мне нужно, чтобы он просто возвращал позицию первого найденного значения.Линейный векторный поиск всегда возвращает true

int linearSearch(const vector<int>& vec, int x) 
{ 
    vector<int>::const_iterator t = find(vec.begin(), vec.end(), x); 
    if (t != vec.end()) 
    return (t-vec.begin()); 

    else 
    return -1; 
} 
+0

Он возвращает 'int', возможно, попробуйте обработать его как' int'. – LogicStuff

+0

Я не понимаю этот комментарий? – GrapeSoda3

+3

Код, который вы опубликовали, в порядке. Код, который вызывает эту функцию, теперь более уместен. Если вы делаете что-то странное, как 'if (linearSearch (...)), то, конечно, это проблема. – LogicStuff

ответ

1

Я думаю, что вы можете использовать std::distance на этом, т.е.

int linearSearch(const vector<int>& vec, int x) 
{ 
    return std::distance(find(vec.begin(), vec.end(), x), veg.begin()); 
} 

Таким образом, вы можете получить прямой доступ к позиции x во входном векторе vec. Если x не находится в vec, результат будет равен расстоянию между vec.begin() и vec.end().

Смежные вопросы