使用 seekg() C++ 倒带流
rewinding stream with seekg() C++
我是 C++ 新手。这是实际运行的程序的一部分,没有内存泄漏。它读取一行,计算有多少双 per/line (aux_d),如果它等于 dim (dimention),它 push_back 到向量中。
读取行,然后倒回 istringstream fss。但是当我打印 v_db[i] (vector_database) 时,它只会将零加载到坐标 class.
coordinates aux_c;
double aux_d;
...做事然后
while(std::getline(filestream,line)){
i=0;
std::istringstream fss(line);
while( fss >> aux_d )
i++;
if (i != dim){
std::cerr << "Wrong Tiberium_Base coordinates // "
<< "Check line -"
<< lc
<< "-"
<< std::endl;
lc++;
continue;
}
fss.seekg(0);
fss >> aux_c;
v_db.push_back(aux_c);
lc++;
}
所以我这样做只是为了让它发挥作用。
std::istringstream fss2(line);
fss2 >> aux_c;
v_db.push_back(aux_c);
lc++;
我想知道这里到底发生了什么,因为我以前用过 seekg 来达到同样的目的,并且完全没有任何问题(实际上在这个程序中)。谢谢
完成循环后。
while( fss >> aux_d )
i++;
fss
已设置 failbit
。您需要先清除它,然后才能使用流。
while( fss >> aux_d )
i++;
...
// Clear the error states of the stream.
fss.clear();
fss.seekg(0);
fss >> aux_c;
我是 C++ 新手。这是实际运行的程序的一部分,没有内存泄漏。它读取一行,计算有多少双 per/line (aux_d),如果它等于 dim (dimention),它 push_back 到向量中。
读取行,然后倒回 istringstream fss。但是当我打印 v_db[i] (vector_database) 时,它只会将零加载到坐标 class.
coordinates aux_c;
double aux_d;
...做事然后
while(std::getline(filestream,line)){
i=0;
std::istringstream fss(line);
while( fss >> aux_d )
i++;
if (i != dim){
std::cerr << "Wrong Tiberium_Base coordinates // "
<< "Check line -"
<< lc
<< "-"
<< std::endl;
lc++;
continue;
}
fss.seekg(0);
fss >> aux_c;
v_db.push_back(aux_c);
lc++;
}
所以我这样做只是为了让它发挥作用。
std::istringstream fss2(line);
fss2 >> aux_c;
v_db.push_back(aux_c);
lc++;
我想知道这里到底发生了什么,因为我以前用过 seekg 来达到同样的目的,并且完全没有任何问题(实际上在这个程序中)。谢谢
完成循环后。
while( fss >> aux_d )
i++;
fss
已设置 failbit
。您需要先清除它,然后才能使用流。
while( fss >> aux_d )
i++;
...
// Clear the error states of the stream.
fss.clear();
fss.seekg(0);
fss >> aux_c;