В других ответах вы бы запретили определенное число или сказали бы пользователю вводить что-то нечисловое для прекращения ввода. Возможно, лучшим решением будет использование std::getline()
для чтения строки ввода, а затем использование std::istringstream
для чтения всех чисел из этой строки в вектор.
#include <iostream>
#include <sstream>
#include <vector>
int main(int argc, char** argv) {
std::string line;
int number;
std::vector<int> numbers;
std::cout << "Enter numbers separated by spaces: ";
std::getline(std::cin, line);
std::istringstream stream(line);
while (stream >> number)
numbers.push_back(number);
write_vector(numbers);
}
Кроме того, ваша реализация write_vector()
может быть заменена более идиоматическим вызовом алгоритма std::copy()
для копирования элементов в std::ostream_iterator
в std::cout
:
#include <algorithm>
#include <iterator>
template<class T>
void write_vector(const std::vector<T>& vector) {
std::cout << "Numbers you entered: ";
std::copy(vector.begin(), vector.end(),
std::ostream_iterator<T>(std::cout, " "));
std::cout << '\n';
}
Вы также можете использовать std::copy()
и несколько удобных итераторов, чтобы получить значения в векторе без явного цикла:
std::copy(std::istream_iterator<int>(stream),
std::istream_iterator<int>(),
std::back_inserter(numbers));
Но это, вероятно, излишне.