我如何在C 中两次使用ifstream上的迭代器
How do I use an iterator on an ifstream twice in C++?
我是C 的新手,我对将迭代器与ifstream一起使用。在以下代码中,我有一个称为datafile的ifstream变量。
在代码中,我首先通过文件迭代,以计算其具有多少个字符(是否有更有效的方法可以执行此操作?)。然后,我创建一个大小的矩阵,然后再次迭代以填充矩阵。
问题在于迭代器拒绝第二次迭代,并且不会做任何事情。我尝试通过使用datafile.clear()从一开始重置ifstream,但这可能没有用,可能是因为我对迭代剂有深深的误解。有人可以帮我吗?
typedef istreambuf_iterator<char> dataIterator;
for (dataIterator counter(dataFile), end; counter != end; ++counter, ++numCodons) {} // Finds file size in characters.
MatrixXd YMatrix = MatrixXd::Constant(3, numCodons, 0);
dataFile.clear(); // Resets the ifstream to be used again.
for (dataIterator counter(dataFile), end; counter != end; ++counter) {...}
istreambuf_iterator
是一个输入迭代器,一旦被递增,其上一个值的所有副本都可能无效,而不是向前迭代器,它可以保证在多通算法中使用时有效性。有关迭代器类别的更多信息,请参见此处。
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- C++两次定义相同的函数会导致错误
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- 使用柯南打包时如何避免列出两次依赖?
- 我如何在C 中两次使用ifstream上的迭代器
- 符号从 ifstream 读取两次
- 为什么 ifstream 返回输入文件的最后一个值两次
- 为什么两次使用ifstream对象会导致错误