Изменение размера вектора в функции в 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 прерывается, если вы вводите что-то кроме целого числа, например. "Д"