我正在编写一个程序,读取每行包含两个值的文件。这些值应存储在两个向量中,xVals和yVals。因此我使用push_back函数,但我希望我的代码更漂亮。现在它就像:
ifstream file;
file.open("foo.txt");
double TempVal;
while(file >> TempVal){
xVals.push_back(TempVal);
file >> TempVal;
yVals.push_back(TempVal);
}
我目前正在寻找的是像这样的解决方案(只是重要的一行):
while(file >> xVals.push_back(??) >> yVals.push_back(??))
问号代表"我不知道如何获得">>"""""""""那里... 是否有一个简单(比上面的三行更容易)或更好的方式来实现这一目标? :-)
由于
答案 0 :(得分:5)
你可以这样做:
double tempX, tempY;
while( file >> tempX >> tempY )
{
xVals.push_back(tempX);
yVals.push_back(tempY);
}
如果你真的想要一些漂亮的,你可以定义一个Point
类来执行流提取/插入,然后只使用算法:
std::vector<Point> points;
std::copy(
std::istream_iterator< Point >( file ), std::istream_iterator< Point >()
, std::back_inserter( points )
);
答案 1 :(得分:0)
为了避免使用TempVal
,您可以直接对矢量实例进行操作:
while(file.good() && !file.eof())
{
xVals.resize(xVals.size() + 1,0.0);
yVals.resize(yVals.size() + 1,0.0);
file >> xVals.back() >> yVals.back();
}