У меня есть станд.:: istream, который относится к матричным данным, чему-то как:
0.0 1.0 2.0
3.0 4.0 5.0
Теперь, для оценки числа столбцов, я хотел бы иметь некоторый код как:
std::vector<double> vec;
double x;
while( (...something...) && (istream >> x) )
{
vec.push_back(x);
}
//Here vec should contain 0.0, 1.0 and 2.0
где... что-то... часть оценивает ко лжи после того, как я читал 2.0, и istream в точке должен быть в 3,0 так, чтобы следующее
istream >> x;
должен установить x, равный 3,0.
Как Вы достигли бы этого результата? Я предполагаю что в то время как условие
Заранее большое спасибо за Вашу справку!
Используйте метод peek
для проверки следующего символа:
while ((istream.peek()!='\n') && (istream>>x))
Прочитайте строки в std::string с помощью std::getline(), затем назначьте строку объекту std::istringstream и извлеките данные из него, а не непосредственно из istream.
Вы можете использовать std::istream::peek()
, чтобы проверить, является ли следующий символ новой строкой.
См. эту запись в справочнике cplusplus.com.
Прочитайте число, затем прочитайте один символ, чтобы узнать, является ли он новой строкой.
std::vector<double> vec;
{
std::string line;
std::getline( ifile, line );
std::istringstream is(line);
std::copy( std::istream_iterator<double>(is), std::istream_iterator<double>(),
std::back_inserter(vec) );
}
std::cout << "Input has " << vec.size() << " columns." << std::endl;
std::cout << "Read values are: ";
std::copy( vec.begin(), vec.end(),
std::ostream_iterator<double>( std::cout, " " ) );
std::cout << std::endl;