问题标签 [istream-iterator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
684 浏览

c++ - 有没有办法使用 istreambuf_iterator 读取特定长度?

我正在这样写我的文件:

所以很自然,我想知道是否有类似的方法来读取让我们说使用std::istream_iteratoror的 5 个字节std::istreambuf_iterator,但是由于它们不支持operator+我似乎无法弄清楚如何实现这一点。

例如,我想象了一个接近这个的解决方案:

有没有办法在 C++14 中做到这一点?

PS:我想要一个使用 STL 的解决方案,所以使用boost不是一个选项。

0 投票
1 回答
16467 浏览

c++ - C++ istream_iterator 不是 std 的成员

谁能告诉我为什么我在编译时写的下面这段代码一直在抱怨istream_iterator is not a member of std,你能告诉我吗?多谢你们

因此,如果您发现问题,请告诉我,因为我目前还不能完全确定,我相信我已经放入了所有必要的包含库

0 投票
1 回答
132 浏览

c++ - 为什么我不能通过传递临时输入迭代器来构造向量?

我经常使用 istream_iterator 将标准输入复制到这样的向量:

有用。

今天当我通过这个构造一个向量时:

它只是无法编译!

但如果我这样构造它:

有用。

为什么?我不能使用临时变量来构造向量吗?如果是这样,但是为什么我在使用 std::copy 时可以这样做?

ps:我是在vs2005下编译的,使用的头文件如下:

0 投票
1 回答
502 浏览

c++ - C++ 从文件中读取数据(书籍练习)

免责声明:这个问题与教科书中的编程练习直接相关。

我正在从教科书中进行 C++ 编程练习,但无法弄清楚如何让它工作。希望有人能指出我的代码中的错误。问题来了……

“使用 istream_iterator、复制算法和 back_inserter 来读取包含用空格分隔的 int 值的文本文件的内容。将 int 值放入 int 向量中。复制算法的第一个参数应该是 istream_iterator 对象与文本文件的 ifstream 对象关联。第二个参数应该是使用类模板 istream_iterator 的默认构造函数初始化的 istream_iterator 对象 - 生成的对象可以用作“结束”迭代器。读取文件内容后,显示结果向量。”

我构建了以下代码。代码编译,但不做任何事情。

文本文件包含以下内容:“12 23 43 34”

我尝试调试代码并注意到文本文件中的值未正确读入 int 向量,因为它们由空格分隔,而不是新行。

有人可以帮忙吗?!

0 投票
1 回答
262 浏览

c++ - istream_iterator表示 std::endl

我有一个以下容器,我想将其存储在一个文件中:

Pointoperator<<()是一个定义了和的基本结构operator>>()

文件格式为:

点元素由 分隔',',点由' '例如:

我设法生成了这样一个文件:

它工作正常。然而,问题在于阅读。当我尝试以下操作时:

所有行的所有点都被读入m_vPoints[0]. 它看起来像std::istream_iterator<Point>()忽略std::endl。使用is >> noskipws将不起作用,因为我仍然想跳过分隔各个点的空格。所以基本上,问题是从 istream 复制,但不是直到达到流尾,而是直到行尾。我在网上看到的示例以cin某种方式设法解析一行,忽略空格字符,但正确地以std::endlor结尾'\n'

我也想避免getline(),因为那时我必须将每一行复制到一个字符串,然后解析该字符串。相反,我想将行i直接复制到容器m_vPoints[i]

0 投票
2 回答
338 浏览

c++ - 可以从 istream_iterator 制作 move_iterator 吗?

考虑以下代码:

由于行 (!!!),上面的代码将无法编译:

但是,如果您分别用and替换mstartand (常规迭代器),则代码将编译。为什么我做不出来?meosstarteosmove_iterators

编辑: 对于那些想知道为什么我想从流/字符串中移动一个字符的人。char实际问题涉及比应避免从字符串复制更复杂的数据类型。char只是为了简单起见而使用,以呈现导致错误的机制。

0 投票
1 回答
473 浏览

c++ - constexpr end istream (sentinel) 迭代器有什么意义?

N2976建议constexpr在标准库中添加一些位置。它指出iostreams 不适用于constexprEXCEPT 结束迭代器。所以istream_iterator并被istreambuf_iterator赋予了constexpr默认构造函数,仅此而已。例如,您可以在整个文件中只出现一次的libstdc++ 实现中看到。constexpr引发此更改的 LWG 是#1129。它说:

istream_iterator并且istreambuf_iterator应该支持文字标记值。默认构造函数经常用于终止范围,并且很容易成为 的字面值 istreambuf_iterator,以及istream_iterator迭代值类型时。[其余省略]

这对我来说没有多大意义。有人可以给我举个例子来说明他们的意思吗?

N3308是另一篇提到但未解释该问题的论文:

某些istream_iterator<T>构造函数必须是 constexprifT是文字类型。目的是允许存储一种T内联类型的现有实现技术继续工作。[libstdc++ 这样做,_Tp _M_value] 但是,它实际上排除了这种技术:T不需要标记的默认和复制构造函数constexpr,如果没有,则 istream_iterator<T>构造函数不能被实例化为 constexpr

上面解释了琐碎的复制构造函数和析构函数,但没有解释为什么默认构造函数被标记为 constexpr。

此外,在在线 GCC 5.2.0 上进行测试时,我复制了 libstdc++ 的实现。唯一的变化是我从istream_iterator(). 在这两种情况下,组件都是相同的。

用 constexpr

没有 constexpr

0 投票
2 回答
3364 浏览

c++ - istream_iterator 遍历二进制文件中的字节

给定一个包含以下十六进制代码的文件:0B 00 00 00 00 00 20 41

我正在尝试填充std::vector <std::uint8_t>然后手动检查每个字节。

这是我使用迭代器构造函数从两个 std::istream_iterators 创建向量的代码

这是我试图通过的单元测试:

为什么在这种情况下,它会跳过两个元素并将我的 std::uint8_t 向量隐式转换为无符号字符?

0 投票
2 回答
188 浏览

c++ - 读取 std::cin 的流迭代器错过了第二个和第三个数字

当它执行时,这个程序会忽略输入到标准输入中的第二个和第三个整数。例如,输入1 2 3 4 5 ^Z并按 Enter 会生成一个包含 的向量1 4 5。当输入由换行符而不是空格分隔时,也会发生同样的事情。

这是取自 C++ Primer(第 5 版,p403)的一个简单示例,所以我认为问题出在我身上。我已经坚持了几个小时,所以任何帮助将不胜感激。

编辑:我最初发布的代码不完整。 iter2(std::cin)并且iter3(std::cin)也在程序中,我认为此时它们只是声明,但事实证明它们是缺少输入的原因。代码应该如下所示:

吸取教训并道歉。删除这样可怕的问题是否有习惯?

0 投票
1 回答
590 浏览

c++ - 没有构造函数 std::istream_iterator 的实例

我有以下问题。我想为我的类创建一个文件构造函数。我正在使用std::copy算法,但出现这种错误:

这是我的构造函数: