Цикл for не заканчивается только в объявленной функции, а не в main - PullRequest
1 голос
/ 09 ноября 2019

Я написал код ниже

Я предполагаю, что цикл for в find_period заканчивается, когда iter встречается arr.end()

Но это не так.

Но когда я переместил цикл for в main(), он работал правильно.

Я не знаю, почему это происходит.

Сначала я думаю,это связано с понятием указателя. Поэтому я изменил код, использующий указатель int find_period(vector<int> *arr). Но это тоже не сработало.

Не могли бы вы дать мне небольшую подсказку?

Большое спасибо!

int find_period(vector<int> arr){
    vector<int>::iterator iter;
    for(iter=arr.begin(); iter != arr.end(); iter++){
        cout << *iter << endl;
    }
}

int main() {
    vector<int> input = {2,2,3,4,5,6,7,8,9};
    vector<int>::iterator iter;

    //for(iter=input.begin(); iter != input.end(); iter++){
    //  cout << *iter << endl;
    ///}

    cout << find_period(input) << endl;
}

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Учитывая, что ваша первая программа просто печатала числа из vector, но теперь вы хотите, чтобы цикл был в функции, тогда вам нужно просто вызвать функцию:

void print_vector(const vector<int>& arr){
    for(auto item: arr){
        cout << item << endl;
    }
}

int main() {
    vector<int> input = {2,2,3,4,5,6,7,8,9};

    print_vector(input);
}

Изначально я был сбит с толкукогда вы сказали: I intend the for loop at find_period is ended when iter meet arr.end(). But it didn't.

Теперь я думаю, что происходит то, что ваша функция find_period() действительно печатает все числа и останавливается в последний раз, но ваш вызов: cout << find_period(input) << endl; печатает дополнительный 0, так что я уверен, что вы видели:

...
7
8
9
0
2 голосов
/ 09 ноября 2019

Строка

cout << find_period(input) << endl;

печатает возвращаемое значение

find_period

, но

find_period

ничего не возвращает. Это неопределенное поведение. Удалить последний вывод:

find_period(input);

вместо

cout << find_period(input) << endl;
...