如何标准地读取“数字行”并将这些数字存储在向量中是什么?
file.in
12
12 9 8 17 101 2
我应该逐行读取文件,将行用多个数字拆分,并将令牌存储在数组中吗?
我应该使用什么方法来完成这个任务?
如何标准地读取“数字行”并将这些数字存储在向量中是什么?
file.in
12
12 9 8 17 101 2
我应该逐行读取文件,将行用多个数字拆分,并将令牌存储在数组中吗?
我应该使用什么方法来完成这个任务?
#include <vector>
#include <fstream>
#include <iterator>
#include <algorithm>
std::vector<int> data;
std::ifstream file("numbers.txt");
std::copy(std::istream_iterator<int>(file), std::istream_iterator<int>(), std::back_inserter(data));
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
int main()
{
std::ifstream theStream("file.in");
if( ! theStream )
std::cerr << "file.in\n";
while (true)
{
std::string line;
std::getline(theStream, line);
if (line.empty())
break;
std::istringstream myStream( line );
std::istream_iterator<int> begin(myStream), eof;
std::vector<int> numbers(begin, eof);
// process line however you need
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
}
begin
是一个 istream_iterator
,它将从 myStream
读取数据,而 eof
则是代表文件结尾的 istream_iterator
。 - Howard Hinnanteof
被默认初始化。规范说明,一个默认初始化的 istream_iterator
表示流结束的迭代器。 - Howard Hinnantwhile(cin << yourinput)yourvector.push_back(yourinput)
它们将自动插入向量 :)
编辑:
如果您想从文件中读取,可以将您的 std::cin 转换为自动从文件中读取:
freopen("file.in", "r", stdin)
freopen
和std::cin
能很好地协同工作吗? - Evan Teranfreopen()
抛出异常了!? - André Caronstd::cin
不会消除空格,>>
运算符才能实现。伪代码是错误的(为什么不直接发布真正的代码呢?)。此外,重新打开标准输入并不是读取文件的好方法。只需使用 std::ifstream
即可,忘记 std::cin
。 - Galik