- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在阅读 Constructing a vector with istream_iterators这是关于将完整的文件内容读入字符 vector 。虽然我希望将文件的一部分加载到字符 vector 中。
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
ifstream ifs(argv[1], ios::binary);
istreambuf_iterator<char> beginItr(ifs);
istreambuf_iterator<char> endItr(beginItr);
advance(endItr, 4);
vector<char> data(beginItr, endItr);
for_each(data.cbegin(), data.cend(), [](char ch)
{
cout << ch << endl;
});
}
这不起作用,因为 advance 不起作用,而上述问题的公认答案有效。为什么 advance 在 istreambuf_iterator
上不起作用?
还有
endItr++;
endItr++;
endItr++;
endItr++;
cout << distance(beginItr, endItr) << endl;
返回 0。请有人解释这是怎么回事!
最佳答案
Why doesn't the advance work on istreambuf_iterator?
它有效。它推进迭代器。问题是 istreambuf_iterator
是一个输入迭代器 但不是一个前向迭代器,这意味着它是一个单遍迭代器:一旦你推进它,您再也无法访问以前的状态。要执行您想要的操作,您可以简单地使用计数为 4 的老式 for 循环。
关于c++ - 为什么 istreambuf_iterator 提前工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245809/
我想在一个文本文件中查找行数,但是在执行istreambuf_iterator 后我无法读取内容。 std::ifstream loadfile("file.txt"); line_count = s
基于这个问题:C++ streams confusion: istreambuf_iterator vs istream_iterator?在 istreambuf_iterator ,我的理解是is
istreambuf_iterator 什么时候抛出异常?当底层流试图读取一个目录时,我收到一个异常,但在其他情况下没有。具体来说,我从 Jan-Philip Gehrcke 的 blog 中获取了脚
在标准中我读到你必须创建一个默认迭代器才能知道迭代器是否已经到达流的末尾。我认为它变得非常丑陋,难道没有任何预定义的符号或等效符号可以帮助我们吗? The default-constructed st
我们可以将整个文件读入一个字符串: std::ifstream ifs(path); assert(ifs.good()); std::string text(std::istreambuf_iter
我正在使用以下代码(使用命名空间 std)将文件内容转换为字符串。 代码 1 string fileToString(const string& filename) { ifstream fi
我有一段代码可以将 .txt 文件的内容读入字符串。 std::ifstream file("address.txt"); std::string oldAddress((std::istreamb
我正在阅读 Constructing a vector with istream_iterators这是关于将完整的文件内容读入字符 vector 。虽然我希望将文件的一部分加载到字符 vector
代码如下: #include #include #include #include std::vector bytes; { std::ifstream in(name, std::i
我尝试将二进制文件内容的一部分读入字符串。为什么是字符串?我的消息协议(protocol)(使用 protobuf)需要这个。 下面的效果很好: std::string* data = new std
以下是an example from cppreference.com , The Code is: #include #include #include #include int main(
istreambuf_iterator 和 istream_iterator 有什么区别。 对于下面的代码: istream_iterator cin_in(cin); istream_itera
我已经使用 从流中一个一个地提取字符,以构造对象。 最终,我的目标是能够使用 istream_iterator 遍历流并将每个对象插入 vector .非常标准,除了我无法获得 istream_ite
istreambuf_iterator 和 istream_iterator 有什么区别?一般来说,流和流缓冲区有什么区别?我真的找不到任何明确的解释,所以决定在这里问。 最佳答案 IOstreams
许多程序员可能会混淆以下代码: int main() { std::ifstream ifs("filename", std::ios::binary); std::string conten
我需要读取一个包含标题和数据的二进制文件(一次性)。在 C++ 中有多种读取文件的方法,我想知道哪种方法最快、更可靠。我也不知道 reintrerpret_cast 是否是将原始数据转换为结构的最佳方
我正在尝试读取一个充满 std::complex 的二进制文件.我尝试了以下代码,as suggested in this SO answer : #include #include #inclu
我无法编译(非常做作)C++ ranges example : #include #include #include template auto populate(R&& range) {
我有以下代码: std::ifstream ifs(fileName, std::ios_base::in | std::ios_base::binary); std::vector vecdata(
我将二进制文件读入 uchar vector ,如下所示: std::ifstream is("path", std::ios::in | std::ios::binary); std::vector
我是一名优秀的程序员,十分优秀!