C++ C++;从istream读取,直到换行(但不是空格)

C++ C++;从istream读取,直到换行(但不是空格),c++,iostream,C++,Iostream,我有一个std::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 应

我有一个std::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
应将x设置为3.0

你将如何实现这个结果?我想这是一个很好的条件


非常感谢您的帮助

使用将行读入std::string,然后将该字符串分配给对象,并从该对象而不是直接从istream中提取数据。

读取数字,然后读取一个字符以查看是否为换行符。

您可以使用
std::istream::peek()
检查下一个字符是否为换行符。 请参阅cplusplus.com参考中的。

使用该方法检查下一个字符:

while ((istream.peek()!='\n') && (istream>>x))
std::向量向量向量机;
{
std::字符串行;
std::getline(ifile,line);
std::istringstream是(行);
std::copy(std::istream_迭代器(is),std::istream_迭代器(),
标准:背向插入器(vec);
}
std::cout我也有类似的问题
输入如下:

1 2
3 4 5
前两个是N1和N2
然后有一条新线
那么元素3 4 5,我不知道会有多少

// read N1 & N2 using cin
int N1, N2;
cin >> N1;
cin >> N2;

// skip the new line which is after N2 (i.e; 2 value in 1st line)
cin.ignore(numeric_limits<streamsize>::max(), '\n');

// now read 3 4 5 elements
int ele;
// 2nd EOF condition may required,
//    depending on if you dont have last new-line, and it is end of file.
while ((cin_.peek() != '\n') && (cin_.peek() != EOF)) {
  cin >> ele;
  // do something with ele
}
//使用cin读取N1和N2
int N1,N2;
cin>>N1;
cin>>N2;
//跳过N2之后的新行(即第1行中的2个值)
cin.ignore(数值限制::max(),'\n');
//现在阅读3 4 5元素
INTELE;
//可能需要第二次EOF条件,
//这取决于您是否有最后一行新行,这是文件的结尾。
while((cin.peek()!='\n')&(cin.peek()!=EOF)){
cin>>ele;
//和ele做点什么
}

这对我来说非常有效。

很抱歉我没有说清楚,但这正是我试图避免的。重点是我事先不知道矩阵是否会有许多列或许多行,而使用字符串存储10.000 double并不是解决这个问题的一种非常有效的方法:)再次抱歉,我没有说清楚,这是我的错。我只是想澄清一下,我之所以要采用这种方法(如果可行的话)是为了避免创建临时对象(除了双x之外)。然后通过std::将上面的向量与矩阵内部存储器交换来创建矩阵(通过std::vector实现)。好的,你可以用10行简单的临时行来完成,也可以不用50行硬行中的临时行来完成。使用一个temporary.OP,特别提到不要先缓冲整行。他建议的代码要求,在之后,向量应该包含第一行:
//这里vec应该包含0.0、1.0和2.0
.Doe他不想读取一行或整个文件吗?是的,我想在读取第一行后结束while循环(并将其余部分保留在istream中以供进一步读取)但是我想避免在将第一整行放入向量之前创建一个字符串来存储它。如果该行在True之前包含任何空格,那么这很容易被破坏;这里根本没有错误检查,我只是假设输入格式正确。
1 2
3 4 5
// read N1 & N2 using cin
int N1, N2;
cin >> N1;
cin >> N2;

// skip the new line which is after N2 (i.e; 2 value in 1st line)
cin.ignore(numeric_limits<streamsize>::max(), '\n');

// now read 3 4 5 elements
int ele;
// 2nd EOF condition may required,
//    depending on if you dont have last new-line, and it is end of file.
while ((cin_.peek() != '\n') && (cin_.peek() != EOF)) {
  cin >> ele;
  // do something with ele
}