在 C++ 中,一个类是否可以拥有一个多维数组成员,其维度和范围直到运行时才知道?

2023-12-14

我最初问的是使用嵌套的 std::array 创建多维数组,直到运行时才知道维度或范围但这有XY 问题尝试使用 std::array 来完成它。

问题Boost.MultiArray 的一行初始化程序 and 如何使未确定大小的多维数组成为 C++ 中类的成员?他们的答案提供了一些有用的信息,如何使用 Boost::MultiArray 来避免在运行时需要知道维度的范围,但未能演示如何拥有一个可以存储数组(在运行时创建)的类成员,其维度和直到运行时才知道范围。


只是避免多维数组:

template<typename T>
class Matrix
{
    public:
    Matrix(unsigned m, unsigned n)
    :   n(n), data(m * n)
    {}

    T& operator ()(unsigned i, unsigned j)  {
        return data[ i * n + j ];
    }

    private:
    unsigned n;
    std::vector<T> data;
};

int main()
{
    Matrix<int> m(3, 5);
    m(0, 0) = 0;
    // ...
    return 0;
}

3D 访问(在适当的 3D 矩阵中)将是:

T& operator ()(unsigned i, unsigned j, unsigned k)  { 
    // Please optimize this (See @Alexandre C) 
    return data[ i*m*n + j*n + k ]; 
}

获取任意维度和范围将遵循该方案并添加重载(和维度/范围信息)和/或利用可变参数模板。

您可以避免上面的大量维度(即使在 C++11 中)并将参数替换为 std::vector。例如:T& 运算符(std::向量索引)。 每个维度(除了最后一个维度)都会有一个存储在向量 n 中的扩展(如上面 2D 示例中的第一个维度)。

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

在 C++ 中,一个类是否可以拥有一个多维数组成员,其维度和范围直到运行时才知道? 的相关文章

随机推荐

  • java网络服务客户端

    我有 stfw 但我找不到一种简单 独立的方法来在 java 中创建 web 服务客户端 有人有这个的链接 样本吗 soapUI是一个测试 Web 服务的好工具 创建服务器存根来测试客户端或仅将客户端请求发送到任何 Web 服务非常简单
  • 发现 iOS 应用程序购买日期

    我明确不是指应用内购买 是否可以在 iOS 上找到应用程序本身的购买日期 我想奖励早期购买者 奖励早期用户 启动应用程序的用户 是not要走的路 我想奖励那些在 1 月 1 日到 1 月 31 日之间购买游戏的用户 甚至是在 2 月 28
  • WPF ComboBox:将 SelectedItem 设置为不在 ItemsSource -> 绑定奇怪中的项目

    我想要实现以下目标 我想要一个显示可用 COM 端口的组合框 启动时 并单击 刷新 按钮 我想获取可用的 COM 端口并将选择设置为最后选择的值 从应用程序设置中 如果设置中的值 最后一个 com 端口 不在值列表 可用 COM 端口 中
  • 在 Vortex86DX 上从头开始构建和编译 GCC 5.2.0 时出错

    为了升级 VortexDX86 定制 linuxgcc 3 2 3编译器 我正在尝试构建 GCC 5 2 0 编译器以支持最新的 C 11 标准 我已经从以下位置下载了它的源代码gcc gnu org并做了基于标准linux包构建器这个链接
  • D3js:自动放置标签以避免重叠? (斥力)

    如何在地图标签上应用力排斥力 以便它们自动找到正确的位置 博斯托克的 让我们制作一张地图 迈克 博斯托克的让我们制作一张地图 下面的屏幕截图 默认情况下 标签放置在点的坐标和多边形 多边形的坐标处path centroid d 简单的左对齐
  • 使用 Python 写入 CSV 会添加空行 [重复]

    这个问题在这里已经有答案了 我正在尝试写入 CSV 文件 但中间有空白行 如何删除空白行 import csv b open test csv w a csv writer b data Me You 293 219 54 13 a wri
  • 如何在python中不断更新固定长度的列表?

    抱歉这个菜鸟问题 我刚刚开始编码 我需要跟踪 1 小时的价格历史记录 我希望每秒将值拉入大小为 3600 的列表中 直到列表被填满 然后从那时起每秒将列表向左移动 以便价格保持不变 while True polo exchange retu
  • 如何将自定义事件发送到 PyQt 中的事件循环

    我正在尝试在 PyQt 中发出自定义事件 一个小部件将发出 另一个小部件将侦听事件 但这两个小部件不需要相关 在 JavaScript 中 我会通过这样做来实现这一点 Component 1 document addEventListene
  • 在javascript中计算元音

    我使用此代码来搜索和计算字符串中的元音 a run forest run a a split var syl 0 for var i 0 i lt a length 1 i for var i2 0 i2 lt a i length 1 i
  • systemd 服务未执行通知发送

    我想在 python 脚本中为某些事件生成弹出窗口 我为此目的使用 通知发送 subprocess Popen notify send Authentication True False 上面的命令在终端上执行得很好 但是当我从 syste
  • 如何修复 Cocoapods 中名称冲突的框架?

    我创建了两个私有 Pod 它们都依赖于相同的供应商框架 当我将 pod 添加到我的主项目中时 出现以下错误 target has frameworks with conflicting names FirebaseAnalytics Fir
  • Kotlin karate-junit-5 未找到任何功能或场景[重复]

    这个问题在这里已经有答案了 我正在使用 karate 与 junit 5 runner 和 kotlin 并且 karate 似乎找不到我的功能文件 我得到以下内容 未找到功能或场景 classpath sncf karate org op
  • 如何在查询字符串中传递 HTML 代码

    我需要使用 QueryString 传递 html 代码 因为我使用 ajax 方法在我的网站上发送帖子 我的意思是评论而不是方法的类型 当我写这样的帖子时 Hi everybody br Whats up 它只是将 大家好 删除了其余内容
  • 如何在构建时将其他文件包含到 C# 的输出目录中?

    我的应用程序需要一些库文件才能工作 我的应用程序包含设置和部署 我已经知道 为了在安装时将库文件添加到应用程序的输出目录中 我只需在构建之前在 NET IDE 中引用这些库 唯一的问题是这些库不能被引用 所以我需要能够将这些库复制到我的应用
  • 用户名是通过 WooCommerce 注册中的账单全名自动生成的

    因此 我在 WooCommerce 网上商店的注册页面中添加了各种自定义字段 如下所示 Registration page Add extra fields in registration form add action woocommer
  • Grails:域类映射(hibernate用户类型的集合)

    我想知道是否可以实现以下域模型 让我们有一个包含一组间隔 joda 时间 的域类 我可以使用 org joda time contrib hibernate PersistentInterval hibernate 用户类型将间隔映射到数据
  • Codeigniter中上传文件问题

    这是我在 codeigniter 应用程序中的 uploadinfg 文件代码 function upload logo ex FILES uploadfile name epld explode ex filename date mdyH
  • 如何在代码中分析 JVM 内存?

    我正在编写一个无法在 Eclipse 中测试的 servlet 我需要在服务器上运行 我想做内存分析并查明任何泄漏 所以 我想我需要编写可以告诉我当前内存使用情况的调试语句 有人可以向我指出关于如何执行此操作和 或 JDK 中的哪些类执行此
  • 使用 FieldInfo.SetValue 与 LINQ 表达式在结构中设置字段

    我想使用 LINQ 表达式设置私有字段 我有这个代码 parameter target the object on which to set the field field ParameterExpression targetExp Exp
  • 在 C++ 中,一个类是否可以拥有一个多维数组成员,其维度和范围直到运行时才知道?

    我最初问的是使用嵌套的 std array 创建多维数组 直到运行时才知道维度或范围但这有XY 问题尝试使用 std array 来完成它 问题Boost MultiArray 的一行初始化程序 and 如何使未确定大小的多维数组成为 C