问题标签 [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.
c++ - 有没有办法使用 istreambuf_iterator 读取特定长度?
我正在这样写我的文件:
所以很自然,我想知道是否有类似的方法来读取让我们说使用std::istream_iterator
or的 5 个字节std::istreambuf_iterator
,但是由于它们不支持operator+
我似乎无法弄清楚如何实现这一点。
例如,我想象了一个接近这个的解决方案:
有没有办法在 C++14 中做到这一点?
PS:我想要一个使用 STL 的解决方案,所以使用boost
不是一个选项。
c++ - C++ istream_iterator 不是 std 的成员
谁能告诉我为什么我在编译时写的下面这段代码一直在抱怨istream_iterator is not a member of std
,你能告诉我吗?多谢你们
因此,如果您发现问题,请告诉我,因为我目前还不能完全确定,我相信我已经放入了所有必要的包含库
c++ - 为什么我不能通过传递临时输入迭代器来构造向量?
我经常使用 istream_iterator 将标准输入复制到这样的向量:
有用。
今天当我通过这个构造一个向量时:
它只是无法编译!
但如果我这样构造它:
有用。
为什么?我不能使用临时变量来构造向量吗?如果是这样,但是为什么我在使用 std::copy 时可以这样做?
ps:我是在vs2005下编译的,使用的头文件如下:
c++ - C++ 从文件中读取数据(书籍练习)
免责声明:这个问题与教科书中的编程练习直接相关。
我正在从教科书中进行 C++ 编程练习,但无法弄清楚如何让它工作。希望有人能指出我的代码中的错误。问题来了……
“使用 istream_iterator、复制算法和 back_inserter 来读取包含用空格分隔的 int 值的文本文件的内容。将 int 值放入 int 向量中。复制算法的第一个参数应该是 istream_iterator 对象与文本文件的 ifstream 对象关联。第二个参数应该是使用类模板 istream_iterator 的默认构造函数初始化的 istream_iterator 对象 - 生成的对象可以用作“结束”迭代器。读取文件内容后,显示结果向量。”
我构建了以下代码。代码编译,但不做任何事情。
文本文件包含以下内容:“12 23 43 34”
我尝试调试代码并注意到文本文件中的值未正确读入 int 向量,因为它们由空格分隔,而不是新行。
有人可以帮忙吗?!
c++ - istream_iterator表示 std::endl
我有一个以下容器,我想将其存储在一个文件中:
Point
operator<<()
是一个定义了和的基本结构operator>>()
。
文件格式为:
点元素由 分隔','
,点由' '
例如:
我设法生成了这样一个文件:
它工作正常。然而,问题在于阅读。当我尝试以下操作时:
所有行的所有点都被读入m_vPoints[0]
. 它看起来像std::istream_iterator<Point>()
忽略std::endl
。使用is >> noskipws
将不起作用,因为我仍然想跳过分隔各个点的空格。所以基本上,问题是从 istream 复制,但不是直到达到流尾,而是直到行尾。我在网上看到的示例以cin
某种方式设法解析一行,忽略空格字符,但正确地以std::endl
or结尾'\n'
我也想避免getline()
,因为那时我必须将每一行复制到一个字符串,然后解析该字符串。相反,我想将行i
直接复制到容器m_vPoints[i]
c++ - 可以从 istream_iterator 制作 move_iterator 吗?
考虑以下代码:
由于行 (!!!),上面的代码将无法编译:
但是,如果您分别用and替换mstart
and (常规迭代器),则代码将编译。为什么我做不出来?meos
start
eos
move_iterators
编辑:
对于那些想知道为什么我想从流/字符串中移动一个字符的人。char
实际问题涉及比应避免从字符串复制更复杂的数据类型。char
只是为了简单起见而使用,以呈现导致错误的机制。
c++ - constexpr end istream (sentinel) 迭代器有什么意义?
N2976建议constexpr
在标准库中添加一些位置。它指出iostream
s 不适用于constexpr
EXCEPT 结束迭代器。所以istream_iterator
并被istreambuf_iterator
赋予了constexpr
默认构造函数,仅此而已。例如,您可以在整个文件中只出现一次的libstdc++ 实现中看到。constexpr
引发此更改的 LWG 是#1129。它说:
istream_iterator
并且istreambuf_iterator
应该支持文字标记值。默认构造函数经常用于终止范围,并且很容易成为 的字面值istreambuf_iterator
,以及istream_iterator
迭代值类型时。[其余省略]
这对我来说没有多大意义。有人可以给我举个例子来说明他们的意思吗?
N3308是另一篇提到但未解释该问题的论文:
某些
istream_iterator<T>
构造函数必须是constexpr
ifT
是文字类型。目的是允许存储一种T
内联类型的现有实现技术继续工作。[libstdc++ 这样做,_Tp _M_value
] 但是,它实际上排除了这种技术:T
不需要标记的默认和复制构造函数constexpr
,如果没有,则istream_iterator<T>
构造函数不能被实例化为constexpr
。
上面解释了琐碎的复制构造函数和析构函数,但没有解释为什么默认构造函数被标记为 constexpr。
此外,在在线 GCC 5.2.0 上进行测试时,我复制了 libstdc++ 的实现。唯一的变化是我从istream_iterator()
. 在这两种情况下,组件都是相同的。
c++ - istream_iterator 遍历二进制文件中的字节
给定一个包含以下十六进制代码的文件:0B 00 00 00 00 00 20 41
我正在尝试填充std::vector <std::uint8_t>然后手动检查每个字节。
这是我使用迭代器构造函数从两个 std::istream_iterators 创建向量的代码
这是我试图通过的单元测试:
为什么在这种情况下,它会跳过两个元素并将我的 std::uint8_t 向量隐式转换为无符号字符?
c++ - 读取 std::cin 的流迭代器错过了第二个和第三个数字
当它执行时,这个程序会忽略输入到标准输入中的第二个和第三个整数。例如,输入1 2 3 4 5 ^Z
并按 Enter 会生成一个包含 的向量1 4 5
。当输入由换行符而不是空格分隔时,也会发生同样的事情。
这是取自 C++ Primer(第 5 版,p403)的一个简单示例,所以我认为问题出在我身上。我已经坚持了几个小时,所以任何帮助将不胜感激。
编辑:我最初发布的代码不完整。 iter2(std::cin)
并且iter3(std::cin)
也在程序中,我认为此时它们只是声明,但事实证明它们是缺少输入的原因。代码应该如下所示:
吸取教训并道歉。删除这样可怕的问题是否有习惯?
c++ - 没有构造函数 std::istream_iterator 的实例
我有以下问题。我想为我的类创建一个文件构造函数。我正在使用std::copy
算法,但出现这种错误:
这是我的构造函数: