2015-03-07 5 views
2

У меня есть следующиеКак вернуть позицию индекса, а не значение?

int index = 0; 

for (int i = start; i < end; ++i) 
{ 
    cout << spot.at(i) << ' '; // prints 190 2 94 
    if (spot.at(i) > spot.at(index)) // finds the greatest value which is 190 so gives back 0 bc spot.at(0) has the highest value 
    { 
     index = i; 
     cout << index; 
    } 
} 
return index; 

поэтому, когда я скомпилировать я получаю 190 вместо индекса, который равен 0. Если я не ставлю обратные макс я получаю 0, но мне нужно, чтобы вернуть индекс с наибольшим значением поэтому я должен включить «возврат». Он работал нормально, но затем он колебался, поэтому иногда он работает в других случаях, но это не так. Теперь я попробовал еще раз с этими значениями129 55 161 67 107 187 164 102 72 135 197 197 start = 0 и end = 11, но он продолжает давать мне 197 вместо индекса, который равен 10. Если я печатаю индекс, он дает мне 10, но когда я возвращаю индекс, это ничего мне не дает. Все еще не совсем уверен, что происходит не так, спасибо за вашу помощь.

+0

В дополнение к 'max', имеют другую переменную для отслеживания индекса, при котором' max' последнего обновления. Или просто используйте ['std :: max_element'] (http://en.cppreference.com/w/cpp/algorithm/max_element) и делайте это с ним. –

+0

Вы не можете использовать одну и ту же переменную max для значения и индекса, вам нужны два разных. –

+0

@buendia Какой тип места? –

ответ

2

Вы хотите отслеживать как значение max, так и индекс, который находится в значении max. Затем, когда вы найдете новый max, вы обновляете как max, так и maxIndex.

int max = spot.at(0); 
int maxIndex = 0; 
for (int i = start; i < end; ++i) 
{ 
    cout << spot.at(i) << ' '; // prints 190 2 94 

    if (spot.at(i) > max) // find the greatest value 
    { 
     max = spot.at(i); 
     maxIndex = i; 
    } 
} 
return maxIndex; 
3
int max_index = 0; 
for (int i = start; i < end; ++i) 
{ 
    cout << spot.at(i) << ' '; // prints 190 2 94 
    if (spot.at(i) > spot.at(max_index)) // find the greatest value 
    { 
     max_index = i; 
    } 
} 
return max_index; 
Смежные вопросы