简单的 istream_iterator 问题

2023-11-29

我是 C++ 新手,如果这是一个愚蠢的问题,我很抱歉。我似乎无法弄清楚为什么这不起作用。它复制到第一个向量中,并且似乎跳过第二个复制调用。

#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

int main ()
{
    vector<int> first;
    vector<int> second;

    copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(first));
    cin.clear();
    copy(istream_iterator<int>(cin),istream_iterator<int>(),back_inserter(second)); 
    return 0;
}

我想使用复制函数将 istream_iterator 输入读取到任意数量的向量中(每个向量一次调用复制)。换句话说:我希望能够在控制台中输入“1 2 3 4 5 ctrl+d”,并将 1,2,3,4,5 输入到第一个向量中。然后在控制台中输入“6 7 8 9 10 ctrl+d”并将6,7,8,9,10输入到第二个向量中。

问题是,在我在第一个向量中输入一些输入并按 control+d 后,cin 的 istream_iterator 仍然等于 istream_iterator(),无论 cin 的失败状态如何。这会导致每次后续调用“copy”失败(因为 istream_iteratorcin 已经等于 istream_iterator(),程序将其解释为 eof)。 所以我的问题是:我需要做什么来“重置”迭代器以及 cin 流? cin.clear() 确实清除了所有失败位。然而,无论如何,istream_iterator(cin) 仍然等于 istream_iterator()。据我了解,当流处于失败状态时,绑定到流的 istream_iterator 应该只等于默认的 istream_iterator 值。我缺少什么?


The istream_iterator is an 输入迭代器,这意味着您只能取消引用每个迭代器值once。您实际上是在从流中读取内容,并且无法查找或返回。因此,一旦到达流末尾,就无需再输入任何内容,并且第二个范围为空。

为什么不直接说vector<int> second(first);复印?


更新:澄清问题后,这是一个新答案:您误解了如何stdin作品。只有one input. Ctrl-D不是 C++ 固有的东西;相反,这是您平台的约定,当您发出信号时,您的平台将终止输入缓冲区Ctrl-D。之后,输入“文件”就完成了,不能再向其中写入更多数据。

不过,你的方法有点非正统。通常,您只需逐行阅读,用分隔符分隔Enter,并对每一行进行标记。使用字符串流,您会得到非常相似的代码:

std::string line;
std::vector<int> first, second;

// Read line 1
if (std::getline(std::cin, line))
{
  std::istringstream iss(line);
  std::copy(std::istream_iterator<int>(iss), std::istream_iterator<int>(), std::back_inserter(first));
}
else { /* error */ }

// Read line 2
if (std::getline(std::cin, line))
{
  std::istringstream iss(line);
  std::copy(std::istream_iterator<int>(iss), std::istream_iterator<int>(), std::back_inserter(second));
}
else { /* error */ }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的 istream_iterator 问题 的相关文章

随机推荐

  • Nullable 的装箱/拆箱行为如何可能?

    今天早些时候发生的一件事让我摸不着头脑 任何类型的变量Nullable
  • 如何从元组列表中删除重复项但保持原始顺序

    我想删除多余的元组但保留出现的顺序 我看了类似的问题 这个问题查找 numpy array 中唯一的行看起来很有希望 但不知何故它对我不起作用 我可以在这个答案中使用熊猫 https stackoverflow com a 14089586
  • char* 的写权限

    巧合的问题 需要能够修改 C 中 char 的内容 我有一个有点像这样的函数 char buffer char FUNCTION 现在我需要修改 缓冲区 例如做这样的事情 buffer 1 h 我尝试过的包括以下内容 char string
  • 具有多列的组合框

    设想 我正在将应用程序从访问权限移至 C 并且在其中一个表单 在访问权限中 上 用户可以选择一个包含 3 列 ID 名字 姓氏 的下拉列表 一旦他们从列表中选择 ID 就会显示在下拉列表中 问题 是否可以使用组合框重新创建此功能 您可以建议
  • 为相关标签搜索设置MYSQL数据库的正确方法?

    有人在我的网站上上传艺术作品 他们输入标题 标签和文件 上传后 我会标记标题 用逗号分隔的标记以及转换后的图像文件的文件路径 我现在想通过标签找到与此最接近的相关艺术 因此 为了找到最接近的匹配 我必须分解标签并搜索每个单独的标签 看来服务
  • Groupby 值依赖于数据框 pandas

    我有以下数据框 df pd DataFrame 1 1 term1 1 2 term2 1 1 term1 1 1 term2 2 2 term3 2 3 term1 2 2 term1 columns id group term 我想将其
  • 使用 python 3.5 安装 cPickle

    这可能很愚蠢 但我无法安装cPickle使用 python 3 5 docker 镜像 Dockerfile FROM python 3 5 onbuild 要求 txt cpickle 当我尝试构建图像时 docker build t s
  • 在openCV中从boundingRect创建一个掩码

    假设我根据某些点得到了一个boundingRect 并将其存储到一个 Rect 对象中 我如何使用这些点并在 openCV 中创建掩模 也就是说 边界矩形之外的所有内容都被屏蔽 或设置为白色 我尝试了几种不同的方法 并且能够使用凸包使其工作
  • 使用 jquery $.ajax 和 php 上传文件

    我希望当用户使用 ajax 在输入文件中选择文件时异步上传文件 但接收调用的 php 返回索引未定义 jquery 代码如下 urlimatge change function var filename urlimatge val ajax
  • Scrapy:无法创建项目

    我在安装 scrapy 时遇到问题lxml但后来我在stackoverflow上找到了一些信息 根据这些信息我做了一个sudo easy install lxml有一些错误 我认为 scrapy 已安装 我做出这样的判断的原因是我拒绝做以下
  • 从 NumberPicker 获取 float/double

    我正在尝试https github com SimonVT android numberpicker图书馆和参考是https developer android com reference android widget NumberPick
  • Java批处理:jobContexttransientUserData未通过步骤

    我正在使用 jsr 352 规范的 JBeret 实现 简而言之 这是我的工作配置
  • 同时使用 css 显示图像裁剪图像的顶部和底部

    我正在尝试显示来自 YouTube 的视频图像 显示内容大小 height 180px width 270px 来自 youtube 的图片顶部和底部有一些黑色斑点 ex 我喜欢显示这样的图像 在互联网上搜索答案 发现这些链接很有帮助 但没
  • 为什么 Python 不会通过“-> type”函数定义抛出类型异常? [复制]

    这个问题在这里已经有答案了 在其他语言中 类似示例的任何内容都会引发类型错误 为什么不用Python呢 gt gt gt def foo a int gt str return a 1 gt gt gt foo 5 6 Python 中的类
  • 如何用bash生成0到3之间的随机十进制数?

    我想生成一个从 0 到 3 的随机十进制数 结果应该如下所示 0 2 1 5 2 9 我知道的唯一命令是 echo 0 RANDOM 500 500 但这总是会产生0 xxx 我怎么做 Bash 不支持非整数 您的代码片段刚刚生成一个 50
  • 在 C# 中使用鼠标在运行时调整按钮大小

    我正在使用以下代码在运行时通过鼠标创建和移动按钮 我还想用鼠标调整它们的大小 此代码由 KekuSemau 提供 非常感谢 KekuSemau 的贡献 它帮助了我 private Point Origin Cursor private Po
  • MailTo 在 Android WebView 中不起作用

    我正在开发一个网站的 Android Webview 我有包括mailto用于联系和发送电子邮件给朋友 网站中的代码片段 联系方式 a href email protected a 发送电子邮件给朋友 a href title Email
  • 如何在我的 Android 应用程序中使用 ScreenShotClient

    我正在开发一个应用程序 可以帮助用户捕获 Android 屏幕截图 Android 4 x 我知道 android ICS 上的帧缓冲区已损坏 我听说我们可以使用 ScreenShotClient 来执行此操作 如下所示 Screensho
  • 带下拉列表的 Laravel 5.2 过滤器

    我想做下拉列表过滤 我有一个网页 显示了一些带有标题和类别的帖子 该页面有一个下拉菜单nav blade php 我从类别表动态生成下拉列表 但是 当我选择下拉菜单中的一项 例如类别名称 时 我希望页面仅显示该类别的帖子 我还创建了类别和帖
  • 简单的 istream_iterator 问题

    我是 C 新手 如果这是一个愚蠢的问题 我很抱歉 我似乎无法弄清楚为什么这不起作用 它复制到第一个向量中 并且似乎跳过第二个复制调用 include