- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试实现一系列为三角矩阵或对称矩阵提供(公共(public))接口(interface)的类,但我想避免复制内存(即进行大量就地操作)。
我想在 C++ 中执行此操作的方法是实现一个类或结构,它只是一个包含矩阵数据的 vector (因为我只关心三角矩阵,所以我只需要存储大约一半的矩阵。 ).我们将此“数据传输”类称为 SquareTriangularMatrix
。现在,可以以不同方式访问此矩阵中的数据,具体取决于数据应被视为上三角、下三角还是对称。
我认为多态性不能应用于我的情况,因为我希望 SquareTriangularMatrix
的同一对象根据上下文具有不同的接口(interface)。有时 SquareTriangularMatrix
可以被视为下三角矩阵,但其他一些可能是它的转置:上三角矩阵,等等。
是否有解决此问题的设计模式?在此上下文中的任何提示或指南将不胜感激。
非常感谢
最佳答案
您可以为您的存储类创建适配器类,如下所示:
struct SquareTriangularMatrix {
// constructor, maybe operator[], etc
int* values;
int nrows;
int ncolumns;
};
struct UpperTriangleMatrix {
UpperTriangleMatrix (SquareTriangularMatrix& data): data(data) {}
int at (unsigned row, unsigned column) const {
if (row > column) return 0;
return data.values [row * data.ncolumns + column];
}
private:
SquareTriangularMatrix& data;
};
然后你可以创建那个类UpperTriangleMatrix
嵌套在 SquareTriangularMatrix
并添加类似 SquareTriangularMatrix::as_upper()
的功能它将返回使用该矩阵构造的适配器。
另一种方法是创建函数 as
在SquareTriangularMatrix
这将允许稍后添加自定义适配器,如下所示:
struct SquareTriangularMatrix {
//...
template <class T> T
as () { return T(*this); }
};
//usage:
SquareTriangularMatrix m;
auto upper = m.as <UpperTriangleMatrix>();
使用这种方法,您可以随时将矩阵转换为您希望满足 as
的任何适配器。模板(非常简单和广泛),并在本地扩展任何文件中的适配器列表。
你也可以按照STL允许的方式转换时间(std::duration_cast
):
template <typename T> T& matrix_cast (SquareTriangularMatrix& m) { return T(m); }
SquareTriangularMatrix m;
auto upper = matrix_cast <UpperTriangleMatrix>(m);
它的工作方式与函数 as<>
相同从前面的示例来看,这只是一个品味问题。
关于c++ - 单个 "data-carrying"类的各种接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208507/
我正在学习本教程:https://skilldrick.github.io/easy6502/ 在 Registers and flags 部分有一个部分说 “如果你足够仔细地看,你会注意到进位标志在
我正在学习本教程:https://skilldrick.github.io/easy6502/ 在 Registers and flags 部分有一个部分说 “如果你足够仔细地看,你会注意到进位标志在
这个问题已经有答案了: How to generate event handlers with loop in Javascript? [duplicate] (3 个回答) 已关闭 8 年前。 基于
下面是一个简单的函数,它将两个 15 位数字相加,两个数字都使用 2 个字符数组存储。然而,在调试之后,我得到了这个错误:Run-Time Check Failure #2: Stack around
Game Boy Z80 CPU 有一个半进位标志,我似乎找不到太多关于何时设置/清除它的信息。 到目前为止我所理解的是,任何 8 位加、减、移位或旋转操作(可能还有其他操作?)将其设置为结果的第 4
我有一个看起来像这样的接口(interface)结构: 最基本的级别是具有以下定义的 IDataProducer: public interface IDataProducer { IEnum
我似乎一直都遇到这个问题。我想修改列表中的一些元素,但我需要在修改时保持一些状态,所以 map 不起作用。 这是一个例子: scala> val l1 = List("a","b","c","d","
我正在尝试实现一系列为三角矩阵或对称矩阵提供(公共(public))接口(interface)的类,但我想避免复制内存(即进行大量就地操作)。 我想在 C++ 中执行此操作的方法是实现一个类或结构,它
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Best way to detect integer overflow in C/C++ 如果我有一个表达式
SO 上有很多关于这个的问题,但我找不到一个完全符合我的情况。 我想使用表的某些字段/列中的值来设置第三个字段/列的值 换句话说是这样的: table races athleteid|difficul
我有一组用于验证的函数(规则),它们以上下文作为参数并返回“Okay”或带有消息的“Error”。基本上这些可以返回一个 Maybe (Haskell)/Optional (Java) 类型。 在下文
我有一个功能组件,如下所示,绘制一个谷歌地图上的一些多边形。我删除了操作细节,只留下了最低限度的信息。。在控制台日志useEffect with Polygons Dependency中,Consol
我有一个功能组件如下所示,在谷歌地图上绘制一些多边形。我删除了行动细节只留下了最少的细节。。在控制台日志useEffect with Polygons Dependency中,Console显示正确更
我有一个由一个主节点和两个工作节点组成的 spark 集群。 当执行以下代码从数据库中提取数据时,实际执行是由 master 执行的,而不是 worker 之一。 sparkSession.r
我正在尝试使用 IMFTransform 将纹理编码为 H264。我可以使用 SinkWriter 将纹理写入和编码到文件中,并且可以播放视频和所有内容,效果很好。但我正在尝试学习如何使用 IMFTr
我确实有一个问题,我似乎无法有效地解决。 假设我的循环结果如下(编造的)。 library(tidyverse) mytib % filter(year == 2019 & month ==01)
以下代码将表示 192 位数的两个未装箱字三元组添加到一个新的未装箱字三元组中,并返回任何溢出: {-# LANGUAGE MagicHash #-} {-# LANGUAGE UnboxedTupl
我想确保运行 Keras 模型交叉验证的代码是正确的。目前我怀疑这是错误的,因为结果似乎过度拟合。 我的代码结构大致如下: def get_model(): .... #code to
我有一个名为 df 的数据框,我在其中应用一些简单的转换(删除列、替换值等)。我正在执行的工作需要我拥有 2 个数据框副本;一种是发生变化的,一种是保持原始状态的。这是我所经历的示例: import
tldr> 一旦选择了客户,所有其他 Controller 如何始终在该客户的“上下文”中执行他们的操作,而无需手动传递 ID? 我试图找出“正确”的方法是处理一个完整的 Controller (或多
我是一名优秀的程序员,十分优秀!