Изменение размера вектора в функции в C++

Этот код взят из книги "Структуры данных и решение проблем в C++" (2003).

void getInts( vector<int> & array )
{

    int itemsRead = 0;
    int inputVal;

    cout << "Enter any number of integers: ";

    while( cin >> inputVal )
    {
        if( itemsRead == array.size( ) )
        array.resize( array.size( ) * 2 + 1 ) ;
        array[ itemsRead++ ] = inputVal;

    }

    array.resize( itemsRead ) ; 

}

int main()
{

    vector<int> array;

    getInts( array ) ;

    for( int i = 0; i < array.size( ) ; i++ )
        cout << array[ i ] << endl;

    return 0;

}

Когда я набираю число в консоли и нажимаю ввод, программа ничего не делает. После этого, если я наберу CTRL+Z как EOF, программа выдаст мне номер, который я набрал. Так как я изменяю размер вектора и даю inputValue для каждой его части, я ожидаю увидеть много чисел вместо одного, столько же, сколько генерирует программа, прежде чем я наберу CTRL+Z, но этого не происходит. Размер вектора, похоже, равен 1. Что является причиной этого?

Также мой другой вопрос, когда я использую цикл while как

while( cin >> inputVal )

Будет ли программа работать, пока я не наберу CTRL+Z. Или набрав 0 будет делать то же самое?

1 ответ

Решение

Цикл while будет продолжаться, пока cin сможет читать целые числа из терминала. Он пытается прочитать целое число каждый раз, когда вы нажимаете Enter.

Каждое целое число чтения добавляется к вектору.

Если введено что-то кроме целого числа, бит сбоя на cin будет установлен.

cin >> inputVal возвращает istream, который обеспечивает operator void* (), который вернется 0 если бит сбоя установлен.

Вот почему цикл while прерывается, если вы вводите что-то кроме целого числа, например. "Д"

Другие вопросы по тегам