如何预分配和初始化 `std::basic_string` 内的字符序列?

2024-02-15

我想知道如何在普通 C++ 字符串中预分配和初始化字符序列。提出这个问题的场合是查询 Windows 注册表中的值。看这个答案 https://stackoverflow.com/a/16304707/1794538一些示例代码。问题在于系统调用写入由调用者分配的数组。我已经通过分配的缓冲区解决了眼前的问题,但是这个解决方案似乎有一个无关的字符串副本。这让我对这个普遍问题感到好奇,这个问题更适合库作者,即如何消除额外的操作。

The 构造函数std::basic_string http://en.cppreference.com/w/cpp/string/basic_string/basic_string不要包含执行此操作的明显方法。在很多方面我希望有一个带有std::unique_ptr吸收指针后面的分配作为其内部存储的参数。我正在考虑这样的示例代码:

size_t len;
// ... Determine len
std::string::allocator_type a = std::string::allocator_type();
std::unique_ptr< char_t[] > p( a.allocate( len ) );
// ... Copy characters to p
std::string s( p, len, a );  // constant-time constructor

这不起作用,因为没有这样的构造函数。问题是如何实现这样一个构造函数。

看来正确的方法是定义一个自定义分配器,其allocate函数返回预分配的存储空间,并且仅执行一次。据推测,这个类本身是通用的,用字符串分配器实例化(如示例中所示)。这似乎可行,但我确信我不理解该方法的所有后果。


None

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

如何预分配和初始化 `std::basic_string` 内的字符序列? 的相关文章

  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 使用静态类型代替变量

    当您的项目不使用命名空间时 有什么方法可以告诉编译器使用静态类型而不是变量吗 例如 我有一个名为 User 的类 它具有各种静态和非静态方法 假设调用了其中一个静态方法GetUser 我想称之为User GetUser 方法来自一个方法 该
  • Entity Framework 4.1 RC:Code First EntityTypeConfiguration 继承问题

    我尝试使用通用的 EntityTypeConfiguration 类来配置所有实体的主键 以便每个派生的配置类不会重复自身 我的所有实体都实现一个公共接口 IEntity 它表示每个实体必须有一个 int 类型的 Id 属性 我的配置基类如
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 获取给定EntityType的导航属性

    我在用VS2010 EF4 0 需要如下功能 private string GetNaviProps Type entityType eg typeof Employee NorthwindEntities en new Northwind
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

    include
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • 使用 roslyn 扩展 C# 语法

    我试图在没有 else 情况的情况下实现 return if return value if 因为我只想在条件有效时返回或返回一个值 我知道 有if condition return or if condition return value
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • 如何将 char 转换为 unsigned int?

    我有一个字符数组 它实际上用作字节数组 而不是用于存储文本 在数组中 有两个特定字节表示我需要存储到无符号 int 值中的数值 下面的代码解释了设置 char bytes bytes 2 bytes 0 0x0C For the sake

随机推荐

  • 如何在 DRF 中序列化通用外键

    我有带有通用外键的模型 我想序列化该模型 model py class AddressType models Model content type models ForeignKey ContentType object id models
  • 使用调试器 gdb 时未知的结束信号

    我已经在 Mac OS X 上安装了 GDB 为了测试它是否有效 我使用了以下 C 程序 include
  • 为所有实体设置默认分配大小?

    我想将默认设置为 50 的默认 AllocationSize 设置为另一个值 有没有办法做到这一点 我更喜欢使用默认的 JPA 来执行此操作 但 Eclipselink 也可以 我不想在我使用的每个实体中指定分配大小 TableGenera
  • 如何使用 AntiXss 库正确清理内容?

    我有一个简单的论坛应用程序 当有人发布任何内容时 我会 post Content Sanitizer GetSafeHtml post Content 现在 我不确定我是否做错了什么 或者发生了什么 但它不允许几乎没有 html 甚至简单
  • System.Data.SqlClient.SqlException:“关键字“Table”附近的语法不正确。”

    我正在尝试使用 Windows 窗体 C 创建一个登录系统 但它给了我一个错误 我正在使用 MySQL 数据库和来自 youtube 的教程 我不知道出了什么错误 该项目包含三个表单 登录表单 注册表单和主程序表单 using System
  • 设置带有条件的标题属性并使用角度翻译

    我在某些条件下使用标题属性 我的代码是 li title span pack details span li 当管理员为真时 它会显示购买许可证包 但是如何使用翻译过滤器将 1 变为 i18n 键 我试过这个 li title span p
  • 无法使用 Azure DevOps Pull 请求对构建错误进行排队

    我想在拉取请求开始合并之前触发构建 在 Azure DevOps 中 对于此选项 我在分支策略下添加了构建验证 但是 如果我创建了一个新的拉取请求 我会收到 无法对构建进行排队 的消息 请任何人告诉我我选择的选项解决了我的要求 如果是 如何
  • 使用node js从ftp站点下载多个文件

    我正在尝试从根文件夹下载 ftp 服务器上的每个文件 我所做的是这样的 ftpClient ls function err res res forEach function file console log file name ftpCli
  • matplotlib 刻度厚度

    有没有一种方法可以增加 matplotlib 中刻度的厚度和大小 而不必编写如下长段代码 for line in ax1 yaxis get ticklines line set markersize 25 line set markere
  • 如何将公式转换为析取范式?

    说给定一个公式 t1 gt 2 或 t2 gt 3 且 t3 gt 1 我希望得到它的析取范式 t1 gt 2 且 t3 gt 1 或 t2 gt 3 且 t3 gt 1 在Z3中如何实现这一点 Z3没有将公式转换为DNF的API或策略 然
  • 使用 python 访问 HDInsight Hive

    我们有一个 HDInsight 集群 其中包含 HIVE 中的一些表 我想从客户端计算机 Azure 外部 的 Python 3 6 查询这些表 我尝试过使用PyHive pyhs2并且impyla但我遇到了所有这些问题 有没有人有一个访问
  • C 在结构体中初始化数组

    我想要在结构中包含一个可变长度数组 但在正确初始化它时遇到问题 struct Grid int rows int cols int grid int main struct Grid testgrid 1 3 4 5 6 我尝试的所有操作都
  • Elasticsearch 6.2 中的精确匹配、不区分大小写的匹配,无需标准化

    我查看了我能找到的关于执行完全匹配 不区分大小写的查询的每一篇文章和帖子 但在实现后 它们并没有执行我正在寻找的内容 在将此问题标记为重复之前 请阅读整篇文章 给定一个用户名 我想查询我的 Elasticsearch 数据库以仅返回与用户名
  • 两个相关 for 循环的复杂度,外层循环的复杂度为 log n

    问题 计算该算法的复杂度 for i n i gt 1 i i 2 for j i j
  • Laravel 默认 auth 模块翻译

    我已经生成了默认的 Laravel auth 模块 在模块刀片的各处 我都看到双下划线 假设翻译即将完成的函数 例如 li a class nav link href Login a li 我的问题 翻译文件在哪里 如果我创建一个 我应该把
  • Django 表单下拉字段中的占位符

    我对 django 形式的下拉字段有一个小问题 我想添加到此字段占位符 或不作为占位符的第一个选项 和一些其他内容 如无标签 类等 我写了这样的东西 在我的forms py但现在我的表单已损坏 不要将值保存到数据库中 from models
  • noexcept 在派生类中的用法

    我在使用时遇到问题noexcept派生类上的说明符 更准确地说 当父类是抽象类时 具有protected构造函数 以下是我声明类的方式的示例 With a public基类中的构造函数 一切正常 与相同的代码protected并且派生类不再
  • 协程中的热流和冷流是什么以及它们之间的区别?

    我正在掌握 Kotlin 协程并试图弄清楚 1 什么是热流和冷流 2 它们之间的主要区别是什么 3 什么时候使用每一个 冷流在开始收集值之前不会开始产生值 另一方面 热流立即开始产生值 我建议阅读以下内容以了解热蒸汽和冷蒸汽的使用 http
  • 如何删除 Windows Phone 8.1 应用程序中的动态磁贴标题?

    我正在 BackgroundTask 中使用 TileWide310x150Image 模板构建一个宽动态图块 它应该只显示宽图像 不显示文本或其他内容 这是我正在使用的模板
  • 如何预分配和初始化 `std::basic_string` 内的字符序列?

    我想知道如何在普通 C 字符串中预分配和初始化字符序列 提出这个问题的场合是查询 Windows 注册表中的值 看这个答案 https stackoverflow com a 16304707 1794538一些示例代码 问题在于系统调用写