来自 std::string 的 std::istringstream 无需复制

2024-01-31

我一直在用这个:

ifstream in("file.txt")
string line;    
getline(in,line);
istringstream iss(line);
...

进行一些简单的解析。 我想避免不必要的复制以提高性能,所以我尝试:

ifstream in("huge_line.txt");
string line;
getline(in,line);
istringstream ss;
ss.rdbuf()->pubsetbuf(const_cast<char*>(line.c_str()), line.size());
...

它似乎可以完成这项工作(即显着提高性能)。我的问题是,考虑到 const_cast 这安全吗? 我的意思是,只要我使用 istrinstream,内部缓冲区就永远不会被 istringstream 类写入,因此只要 line 变量有效且未更改,ss 变量就应该保持有效状态,对吧?


The const_cast是安全的,因为底层缓冲区std::string is not const。是的,只要line不会过期,同时ss正在读取,你的程序应该没问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 std::string 的 std::istringstream 无需复制 的相关文章

随机推荐

  • 消失的存储过程

    所以 不确定发生了什么 但我有存储过程 它在 SQL 2k 中不断从我的数据库中消失 我可以再次添加它 然后尝试从我的网络应用程序执行它 但出现异常 提示无法找到存储过程 然后我会回到管理层并刷新 然后它又消失了 这是存储过程的配置 set
  • Android 树视图

    我知道有可扩展列表视图 http developer android com reference android widget ExpandableListView html但最多只支持2级 我需要一个真正的树视图垂直列表 至少有大约 5
  • 如何在树枝模板中输出胡子模板?

    我需要使用 symfony2 将胡子模板添加到 Twig 模板中 有人为 django 创建了一个 逐字 模板标签 我正在为 twig 寻找一个相应的模板标签 以防止它解析 Mustache 元素 有人能指出我正确的方向吗 Thanks 我
  • 为 ggplot2 生成亮色和暗色对

    brewer pal n 8 name Paired 最多可以创建八个颜色对 但其中只有少数颜色适合打印 有没有更灵活的函数可以生成深色吊坠 应该是深色的 在黑暗中看起来像相同的颜色 可打印 很容易与亮色区分开来 有没有 colorbrew
  • 设计基于权限的安全模型

    我在开发一个 vb net winforms 应用程序 目前我们使用简单的角色来确保安全 我们根据当前用户是否具有所需的角色来启用 禁用特定控件 我们已经到了这样的地步 这已经不够精细了 我们的应用程序基于我们称之为站点的不同物理位置 用户
  • 有什么方法可以找出 Angular 2 中触发变化检测的因素吗?

    我最近发布了一个新组件 它似乎每秒多次触发更改检测 some debugging code ngDoCheck console log DO CHECK new Date toLocaleTimeString Results 我还没有弄清楚
  • 使用 Redux 时如何声明 ReactJS 默认 props?

    在 React 中声明默认 props 的正确方法是什么 这样当我在使用 redux 异步分配的 props 上调用 map 时 我就不会收到未定义的错误 现在 使用以下语法 在尝试分配 trans filter 时出现错误 因为数据在渲染
  • 在非对象上调用成员函数 count() (Laravel 5)

    我有一个项目列表 我可以单击它 它 需要 显示项目名称以及项目任务列表 ToDo 应用程序 但是当我单击某个项目时 我收到此错误 H2 项目名称将显示 h2 gt project gt name if project gt tasks gt
  • Android 无法保留嵌套在其他片段中的片段

    我的应用程序有问题 我尝试在另一个Fragment中添加三个Fragment 然后 Eclipse 显示 java lang IllegalStateException 无法保留嵌套在其他片段中的片段 这是我在 childFragments
  • 在常量表达式中调用“static constexpr”函数是...错误? [复制]

    这个问题在这里已经有答案了 我有以下代码 class MyClass static constexpr bool foo return true void bar noexcept foo 我希望从那时起foo is a static co
  • OracleConnection.Open 抛出 ORA-12541 TNS 无侦听器

    所以我通过 C 连接到外部服务器 我刚刚安装甲骨文11g我的机器上的客户端从这里 http www oracle com technetwork database windows downloads index 090165 html ht
  • 在 iPhone 上播放 CAF 声音的最简单方法?

    做到这一点有多难 有人告诉我 在 iPhone 上播放音频非常困难 实在不敢相信 但他说玩一个很难 但同时玩两个或三个就很难了 听起来很可怕 对此大家有什么想说的吗 我想要做什么 我有大约 10 个带有小光点 蜂鸣声和按钮按下声音的 CAF
  • 使用 Groovy 修改节点标签的 Jenkins/Hudson CLI API

    有谁知道如何以非手动方式修改 Jenkins Hudson 节点标签 我的意思是 彻底的 API 如该工具提供的 CLI API 当然无需重新启动 Jenkins Hudson 我的猜测是 最好的选择是使用 Groovy 脚本进入 Jenk
  • 在 JUnit 中检查异常的最佳实践是什么?

    我正在尝试编写测试用例 根据我所读到的内容 我的测试从一开始就应该失败 我应该努力让测试通过 但是 我发现自己正在编写测试来检查边界以及它们应该引起的异常 Test expected NegativeArraySizeException c
  • 如何从ABRecordID获取ABRecordRef?

    我已访问地址簿并成功从中提取了记录和必要信息 我也提取了recordid 我的问题是如何使用这个 recordid 来提取记录 我正在使用的代码是 ABRecordID recordId ABAddressBookRef addressBo
  • C# 如何将光驱盘符从 D: 更改为 Z:

    我正在尝试编写一种方法 将 CD ROM 驱动器从字母 D 更改为字母 Z 但对 WMI 没有任何运气 还有其他方法可以使用 C 来做到这一点吗 public void setVolCDROM SelectQuery queryCDROM
  • `git log --all` 怎么会错过提交点?

    提交后 我会提醒我处于分离的 HEAD 状态 gt git commit m Implemented Runrealfast algorithm detached HEAD af46ac9 Implemented Runrealfast a
  • AWS Lambda 热启动和冷启动

    您好 我是 AWS Lambda 新手 我想知道热 Lambda 函数 热启动 和冷 Lambda 函数 冷启动 是什么意思 谁能详细解释一下热 Lambda 和冷 Lambda 之间有什么区别 上传代码后或一段时间不活动后 您的 Lamb
  • 自解压可执行 C++

    我试图了解自解压 PE 文件的工作原理 有人可以解释为什么我的代码不起作用 或者修复 main 部分 include
  • 来自 std::string 的 std::istringstream 无需复制

    我一直在用这个 ifstream in file txt string line getline in line istringstream iss line 进行一些简单的解析 我想避免不必要的复制以提高性能 所以我尝试 ifstream