2015-02-26 2 views
0

Это простая программа, в которой я инициализирую вектор, передавая его ссылкой на функцию, а затем нахождение максимального значения. Значения в векторе все еще остаются нулями и не обновляются до тех, которые предоставляются через вход консоли.Вектор не добавляет значения

#include <iostream> 
#include <vector> 

using namespace std; 

void initialize(vector<int>& v) { 
    int n; 
    for (int i = 0; i < 10; i++) { 
     cout << "Please enter the value " << (i + 1) << ": "; 
     cin >> n; 
     v.push_back(n); 
    } 
} 

int findMax(vector<int>& v, int& max) { 
    int iMax = 0; 
    for (int i = 1; i < 10; i++) { 
     if (v[i] > max) { 
      cout << endl << "v[" << i << "] = " << v[i] << endl; 
      max = v[i]; 
      iMax = i; 
     } 
    } 
    return iMax; 
} 

int main() { 
    vector<int> v(10); 
    initialize(v); 
    int max = v[0]; 
    int x = findMax(v, max); 
    cout << "The maximum value is " << max << " and is strored at the index position " << x << endl; 
    system("pause"); 
    return 0; 
} 
+0

В findMax вы пропускаете элемент 0, потому что ваш цикл начинается с i = 1. В ваших тестовых данных, является первым элементом max и являются остальными из них нулями? – theoutlander

ответ

2
vector<int> v(10); 

делает первые 10 элементов равен 0. Тогда вы используете push_back в initialize, который добавляет элементы 11-го по 20-й.

Вы можете это исправить, изменив выше строку:

vector<int> v; 

или с помощью

v[i] = n; 

в initialize

+0

Я тебя люблю Саху. Огромное спасибо. Вы сделали мой день. –

0

push_back на уже инициализирован вектора не требуется. Идем дальше и используем либо итератор или индекс, либо шаг за шагом, и заменяем значения.

Я бы предложил только вектор объявления v; и чем использовать push_back, поскольку программа становится более универсальной, и вам не нужно знать размер вектора прямо с самого начала!

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