将动态数组包装到 STL/Boost 容器中?

2023-11-22

我需要将动态分配的数组(例如从 a = new double[100] )包装到 std::vector (最好)而不复制数组。 此限制是由于我想要包装的数组是从文件映射而来的,因此仅执行向量(a,a+size)就会使内存使用量增加一倍。

有什么技巧可以做到这一点吗?


最好的解决方案之一是这样的STLSoft的array_proxy模板。不幸的是,doxygen 从源代码生成的文档页面并不能帮助理解模板。源代码实际上可能会更好一些:

  • http://www.stlsoft.org/doc-1.9/array__proxy_8hpp-source.html

The array_proxy<>模板在中得到了很好的描述马修·威尔逊 (Matthew Wilson) 的书《不完美的 C++》。我使用的版本是 STLSoft 网站上内容的精简版本,因此我不必引入整个库。我的版本不是那么便携,但这使得它比 STLSoft 上的版本简单得多(它跳过了很多可移植性的障碍)。

如果你像这样设置一个变量:

int myArray[100];

array_proxy<int> myArrayProx( myArray);

变量myArrayProx有许多 STL 接口 -begin(), end(), size()、迭代器等

所以从很多方面来说,array_proxy<>对象的行为就像一个向量(尽管push_back()自从array_proxy<>无法增长 - 它不管理数组的内存,它只是将其包装在更接近向量的东西中)。

一件非常好的事情array_proxy<>的一点是,如果将它们用作函数参数类型,则函数可以确定传入数组的大小,而本机数组则不然。并且包装数组的大小不是模板类型的一部分,因此使用起来非常灵活。

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

将动态数组包装到 STL/Boost 容器中? 的相关文章

随机推荐

  • 使用 wget 递归获取其中包含任意文件的目录

    我有一个 Web 目录 用于存储一些配置文件 我想使用 wget 来提取这些文件并维护它们当前的结构 例如 远程目录如下所示 http mysite com configs vim vim 包含多个文件和目录 我想使用 wget 在客户端上
  • 使用开发依赖项在 Heroku 上部署时尝试从命名空间“Symfony\Bundle\WebProfilerBundle”加载类“WebProfilerBundle”

    我们有一个托管在 Heroku 上的 Symfony 4 3 Web 应用程序 这是一个新的设置我们从未设法让开发模式正常工作 网上有很多类似的问题 但没有一个能解决我们在这里面临的确切症状 该项目是使用命令行创建的 composer cr
  • MySQL InnoDB 数据库恢复

    我必须恢复在 MySQL 5 0 中无意中删除的数据库 通过检查备份文件 我似乎只有 FRM 文件来保存数据库数据 任何人都可以建议这是否是我从备份执行数据库恢复 导入所需的全部内容 或者我还需要提供其他文件来完成此操作吗 frm 文件不是
  • 如何像 Eclipse 一样清理 IntelliJ IDEA 中的项目缓存?

    有时IDE会因为缓存而出现一些错误 在Eclipse中 我们可以使用clean来解决问题 我怎样才能在 IntelliJ 中做到这一点 取决于您正在运行的版本 基本上是一样的 只需转到 File gt 使缓存无效 然后重新启动Intelli
  • 什么是 .exe 文件存根?

    我正在学习如何使用混淆我的程序集 NET反应堆 一种选择是 生成本机 x86 EXE 文件存根 我不明白它的目的 我导入一个程序集 例如 exe 文件 并输出一个经过混淆的 exe 文件 其大小大致相同 如果我检查过 生成本机 x86 文件
  • 在 VS2010 Express 中创建构造函数的代码片段

    VS 2010 Express 版本 适用于 C 中是否有任何现成的代码片段 可以使用选定属性中的参数创建构造函数 当我创建一个新类并编写以下代码时 public class FileDetails public int ID get se
  • 将 C# 控制台应用程序转换为 DLL

    我正在将 Betfair API 从 SOAP 重写为 JSON 并且按照之前的方式开始 将其作为控制台应用程序 然后从任务调度程序或 win 服务中调用 然而现在我被要求用代码做各种不同的工作 我不想为每项工作编写一个控制台应用程序 不同
  • error_code:如何设置和检查errno

    我试图了解在调用设置的 C 函数时应该使用什么类别errno在 Linux 上 我不确定所有可能的错误代码都是由 POSIX 定义的 所以我很想使用system category 但我喜欢稍后在代码中处理通用条件 所以我想做这样的事情 st
  • Flutter 入门屏幕仅一次

    我是 flutter 和 dart 的新手 我正在尝试制作一个带有 3 页的入门屏幕的应用程序 并且当用户已经打开该应用程序一次时 我试图跳过入门屏幕 我见过与共享偏好类似的东西 但我无法使其发挥作用 这是我的入门屏幕 class Onbo
  • 在没有 Maven 或 Gradle 的情况下将 JUnit 5 与 Java 9 结合使用

    说明 我想使用创建一个 JUnit 测试JUnit 5 in 日食 氧气 4 7 1a 此 JUnit 测试应位于名为 Test 的单独 src 文件夹内 然而 由于我是 JUnit 的新手 我遇到了以下问题Java 9 I 不要使用像这样
  • PHP按键值降序对数组进行数字排序[重复]

    这个问题在这里已经有答案了 PHP 中是否有一个选项可以按键值降序对数组进行排序 我知道您可以使用以下命令对键值进行排序ksort 是的krsort fruits array d gt lemon a gt orange b gt bana
  • PySpark:获取数据框中每列的第一个非空值

    我正在处理不同的 SparkDataFrames 其中许多列中有很多 Null 值 我想要得到any one每个列中的非空值 以查看该值是否可以转换为日期时间 我尝试做df na drop first 希望它会删除所有具有空值的行以及剩余的
  • 使用像 bash 管道这样的操作系统进程:发送 STDIN 并获取其 STDOUT

    我正在尝试使用外部过程它读取 STDIN 并写入 STDOUT 我想在 Elixir 中编写与此等效的内容 而不使用外部库或包装脚本 echo foo nkf foo 即发送数据到nkf在 stdin 上 并从返回转换后的结果nkf的标准输
  • LUA 中的随机种子

    我正在编写一个随机化数字的代码 我放math randomseed os time 在一个循环内 代码如下 for i 1 1000 do math randomseed os time j math random i row one u
  • 是否可以为 Android 应用程序提供动画启动器图标? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我只是好奇 Android 是否支持动画启动器图标 例如 iOS 的日历应用程序始终显示当前日期或图标上有移动的手的时钟 不是一般情况下 安卓有应用程序小部件为了那个原因 某些主屏幕
  • 使用 IEqualityComparer 的建议最佳实践是什么?

    我正在寻找现实世界的最佳实践 其他人可能如何实施具有复杂领域的解决方案 任何时候您考虑使用IEqualityComparer
  • 是否可以重置所有继承的 CSS 属性?

    如何重置 CSS 文件中类的所有继承属性 我需要能够在元素上设置新属性 而预定义属性不会对其产生影响 仅使用 CSS 可以吗 我不是在谈论 CSS 重置 例如 body margin 0px padding 0px 简单的答案 你不能 Un
  • NGINX 代理到 WordPress 网站

    我有一个静态服务的站点 使用 nginx 我想在 blog 文件夹下托管一个 WordPress 博客 托管在不同的实例上 使用 nginx 代理时 location blog proxy set header X Is Reverse P
  • 使用phonegap调用本机文件浏览器

    我必须在我的phonegap 项目中实现文件上传功能 用户应该能够从手机内存或 SD 卡上传任何类型的文件 我使用 jQuery Mobile 框架设计的应用程序屏幕 我尝试了 input type file 但 android 4 4 不
  • 将动态数组包装到 STL/Boost 容器中?

    我需要将动态分配的数组 例如从 a new double 100 包装到 std vector 最好 而不复制数组 此限制是由于我想要包装的数组是从文件映射而来的 因此仅执行向量 a a size 就会使内存使用量增加一倍 有什么技巧可以做