如何在不复制的情况下从字符串流中获取字符?

2023-12-28

在不使用 boost 的情况下从字符串流中提取一组字符的正确 C++11 方法是什么?

如果可能的话,我想在不复制的情况下执行此操作,因为使用它的位置是在关键数据循环中。不过, std::string 似乎不允许直接访问数据。

例如,下面的代码从字符串流中执行子字符串复制:

inline std::string left(std::stringstream ss, uint32_t count) {
    char* buffer = new char[count];
    ss.get(buffer, count);
    std::string str(buffer);  // Second copy performed here
    delete buffer;
    return str;
}
  1. 我什至应该根据 c++11 使用 char *buffer 吗?
  2. 如何避免制作第二份副本?

我的理解是向量初始化每个字符,所以我想避免这种情况。

另外,这需要传递到一个接受 const char * 的函数中,所以现在在运行之后我被迫执行 .c_str() 。这也能复印吗?

如果能够传回 const char * 那就太好了,但这似乎违背了“正确的”c++11 风格。

为了理解我想要做什么,这是我想要“有效”使用它的目的:

fprintf( stderr, "Data: [%s]...", left(ststream, 255) );

但 c++11 强制:

fprintf( stderr, "Data: [%s]...", left(str_data, 255).c_str() );

我在这里制作了多少份该字符串的副本?

如何将其减少为字符串流中的单个副本?


您可以使用此链接中描述的内容:如何直接从 char* 数组创建 std::string 而无需复制? https://stackoverflow.com/questions/6700480/how-to-create-a-stdstring-directly-from-a-char-array-without-copying

基本上,创建一个字符串,使用传递给函数的大小对字符串调用 resize() 方法,然后将指向字符串第一个字符的指针传递给 stringstring.get() 方法。您最终只会得到一份副本。

inline std::string left(std::stringstream& ss, uint32_t count) {
    std::string str;
    str.resize(count);
    ss.get(&str[0], count);
    return str;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不复制的情况下从字符串流中获取字符? 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 无法将磁盘添加到 Google VM 实例

    我无法向谷歌云虚拟机实例添加额外的磁盘 有限制吗 配额没问题 我已经添加了 6 个磁盘 第七有问题 我尝试了多个实例和多个磁盘 我收到错误 Editing VM instance X failed Error Invalid resourc
  • 如何保护使用 javax.scripting 运行的脚本?

    我在用javax scripting添加对在服务器端运行任意用户上传的 JavaScript 的支持 显然我想保护这些脚本 Rhino 本身有一个用于在运行时保护脚本的框架 的文档javax scripting但是 没有提及脚本可用的安全性
  • 解析二进制文件。什么是现代方式?

    我有一个二进制文件 其中有一些我知道的布局 例如让格式如下 2 个字节 无符号短整型 字符串的长度 5 个字节 5 个字符 字符串 一些 id 名称 4 个字节 无符号整数 一个跨步 24 字节 6 x 浮点 2 个步幅 每个步幅 3 个浮
  • 自动在后台启动应用程序?

    有没有办法让 iOS 应用程序保留在后台 以便它在设备打开时自动启动 并且在终止后会在稍后重新启动 我读过一些关于 VoIP 和 GPS 服务的帖子 我的应用程序发送带有用户位置的紧急短信 它需要保持活跃以监听遇险触发因素 是否可以通过使用
  • Mysql 从日期范围列表中生成每个日期

    我有一个查询 select from bla bla 它产生如下所示的日期范围结果 code date1 date2 a 2016 04 19 2016 04 21 b 2016 04 13 2016 04 14 我想生成 date1 和
  • 如何比较 Go 错误

    我有一个错误值 当在控制台上打印时给我Token is expired 如何将其与特定误差值进行比较 我尝试了这个但没有成功 if err errors New Token is expired log Printf Unauthorise
  • 在 C++ 中区分 typedef 和相同类型

    我想要类似于下面的功能 typedef int A typedef int B struct foo foo A a specific to type A foo B b specific to type B 我在程序中使用 typedef
  • UNION 多个存储过程的结果

    我有一个存储过程 我需要调用几次不同的时间 每次传递不同的参数 我想将结果收集为单个数据集 这样的事情可能吗 exec MyStoredProcedure 1 UNION exec MyStoredProcedure 2 UNION exe
  • 将事件处理程序添加到 iframe 以在 keyup 上调用

    在网页上我有 iframe 在其中显示一些内容 如果在 iframe 内按下任何键 iframe 是可编辑的 我想运行一个函数 我可以使用ajax 页面上有scriptmanager 来做到这一点 Sys UI DomEvent addHa
  • Ember.js - 如何使用 DS.store.findRecord() 方法处理错误

    我正在使用以下简单代码来检索用户 来自服务器 var someUser this store findRecord user 0 我用它来检索用户 如果在 0 id 上找不到用户 服务器返回 404 并根据 json api 出现错误 但我
  • 如何在R-studio中的函数体中设置断点?

    我有一个 R 脚本 它调用我编写的函数 但是 当我执行脚本时 程序不会停止在函数体中的调试点处 调试点唯一起作用的时间是在主脚本文件中设置它们时 我正在使用 R studio IDE 但是任何通用的解决方案也将受到赞赏 如果您处理多个文件
  • 获取 ORACLE 编程对象定义

    假设我有一个 ORACLE 模式 其中包含一个包 该包定义了类型 函数 过程等 CREATE PACKAGE DECLARE FUNCTION PROCEDURE END 是否可以执行查询来获取这些单独对象的定义 而无需包装包 如果您需要该
  • perl - 如何创建一个包含 n 个空字符串或零的数组?

    当我在 Perl 中操作 CSV 文件时 我经常需要用一些相同元素初始化一个数组 my arr for my i 0 n 1 push arr 有没有办法以更紧凑的形式做到这一点 完美的是 我希望有一个用于此目的的表达式 以便我可以轻松添加
  • getcwd() 和 dirname(__FILE__) 之间的区别?我应该使用哪个?

    在 PHP 中 有什么区别 getcwd dirname FILE 当我从 CLI 回显时 它们都返回相同的结果 echo getcwd n echo dirname FILE n Returns home user Desktop tes
  • 如何通过 JAXB 使用 hashmap 属性?

    我已经摆弄 JAXB 一段时间了 我需要生成如下所示的 xml
  • 在 PHP 中设置多个 Cookie

    感谢您对此提供帮助 我有一个脚本检查登录然后设置一些cookie 正在设置 4 个 cookie 稍后我可能会将一些移动到服务器会话 但现在我正在使用 cookie 我遇到的问题是 在执行脚本的其余部分之前 仅设置了 4 个中的前 2 个
  • 如何在postgresql中禁用外键约束

    我正在使用 AWS Aurora Postgres 并使用 DMS 从 RDS postgres 迁移到 Aurora PG 为了执行完全加载 我想禁用所有对象上的外键约束和触发器 我能够禁用触发器 但找不到禁用约束的方法 下面不起作用 A
  • Eclipse Java 模板在重新启动时重置

    有一次我需要在控制台中输入大量文本 所以我将 sysout 模板更改为 System out println word selection cursor 代替 System out println word selection cursor
  • Appcelerator Titanium:CSS 宽度不适用于百分比

    我在 Appcelerator 中制作了一个 HTML 项目 我想要一个全屏画布 所以在 CSS 中我将属性设置为100 不带引号 我发现它不适用于 Appcelerator 我试过了 100 带引号和Ti UI SIZE两者的尺寸都采用奇
  • 如何在不复制的情况下从字符串流中获取字符?

    在不使用 boost 的情况下从字符串流中提取一组字符的正确 C 11 方法是什么 如果可能的话 我想在不复制的情况下执行此操作 因为使用它的位置是在关键数据循环中 不过 std string 似乎不允许直接访问数据 例如 下面的代码从字符