- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试通过使用 std::distance
作为 vector 的构造函数参数来计算 std::cin
读取的元素数量,就像这样:
// Gives correct amount, but now can't use to put into vector
int size = std::distance(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>());
std::vector v(size);
// Already read from stream
std::copy(...);
显然,我可以使用 std::copy
一步完成,但这需要事先设置一个大小。我的问题不是关于 vector ,而是关于使用 std::istream_iterator
获取任意输入的大小而不影响流。有什么想法吗?
最佳答案
std::istream_iterator
是一个 InputIterator
,这意味着它只支持在您迭代的范围内进行单次传递。没办法先算出大小,再回到开头读取数据。
您可以使用 std::copy
从 std::cin
(或任何其他输入流)读取,而无需事先知道大小,只需使用 std::back_inserter
将正在读取的数据附加到 vector
。
std::vector v;
std::copy( std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::back_inserter(v) );
关于c++ - istream_iterators 之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16373420/
#include #include #include #include using namespace std; int main() { vector v(istream_itera
嗨,我希望有人能帮助理解下面代码的这种行为。 #include #include #include #include #include #include #include struct
我尝试实现“C++ 标准库”第 107 页中的流迭代器示例。我被困在这条线上: copy (istream_iterator(cin), istream_iterator(), back_insert
我在将 istream_iterator 用于我需要的目的时遇到困难。我有一个文件,我想将其逐行读取到一个集合中。我必须使用迭代器,我想知道我的代码或我的方法是否有问题。 非常感谢您的帮助。这是我正在
好吧,你们对我的最后一个问题很有帮助,所以我会尝试另一个问题。这也是作业,虽然上一个很旧,但已提交并等待标记。所以如果有什么东西会咬我,那可能就是这个问题。我混淆了类(class)名称等,因为仍然可以
我有两段代码。它们在 main() 中单独使用时可以正常工作。 vector v; cout start_cin(cin); istream_iterator end_of_cin; copy(st
我不明白为什么第二个参数 for_each 是一个空迭代器。有人可以向我解释一下吗? fstream("datfile.txt"); for_each(istream_iterator(datfile
给定一个包含以下十六进制代码的文件:0B 00 00 00 00 00 20 41 我正在尝试填充一个 std::vector ,然后手动检查每个字节。 这是我使用迭代器构造函数从两个 std::is
我尝试实现“C++ 标准库”第 107 页中的流迭代器示例。我被困在这条线上: copy (istream_iterator(cin), istream_iterator(), back_insert
给定一个包含以下十六进制代码的文件:0B 00 00 00 00 00 20 41 我正在尝试填充一个 std::vector ,然后手动检查每个字节。 这是我使用迭代器构造函数从两个 std::is
这是一个 Minimal, Complete, Verifiable Example我知道这不是copacetic。无论如何,给定结构: struct Foo { int even;
如果您将输入编码为 std::istream_iterator ii(std::cin); std::istream_iterator eos; std::for_each(ii,eos,record
我从标准输入得到以下输入: 2 5 2 1 5 3 4 5 2 5 1 3 4 第一行代表队列数(我们称这个值为n)。然后,对于每个队列,在第一行有一个值 l 表示队列的长度,后面是实际队列。 我正在
我正在尝试通过使用 std::distance 作为 vector 的构造函数参数来计算 std::cin 读取的元素数量,就像这样: // Gives correct amount, but now
我编写了以下程序,从 std::cin 读取 3 个数字,并将它们输出到 std::cout , 并执行两次: #include #include #include int main() {
在这种情况下,当从控制台获取字符串输入时,源代码结尾是什么? int main() { std::vector str; copy (istream_iterator(std::cin),
我在 istream_iterator 读取文件时遇到问题,因为它会忽略空行,但我需要将这些空行包含为“”。 我应该如何修改下面的程序以获得 vector 中的 5 条线? #include #in
我想读取以下输入: Foo 1 2 4 Bar 3 4 5 作为两个独立的“字符串”对象。 是否可以使用 istream_iterator 来完成此操作? 我在哪里可以找到所有这些迭代器的好文档? 最
我可以在两个 istream_iterators 之间进行赋值操作吗?如果是这样,那么行为会是什么,即两个迭代器是否会指向文件中的同一位置,即我们会得到两个指向文件中同一行的指针吗? 如果是这样,我可
我正在尝试从 ifstream fin 中读取并使用 istream_iterators 将其放入 vector vec1 中。我到处都看到了这些东西: vector vec1((istream_it
我是一名优秀的程序员,十分优秀!