gpt4 book ai didi

objective-c 中的 C++ 矩阵

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:47 25 4
gpt4 key购买 nike

我正在尝试编写一个类来在 Objective-c 中操作矩阵,最初我使用的是 NSArrays 和 NSNumbers,但是这导致我正在做的事情(模拟双摆)的代码非常慢所以我决定尝试并将我的数组重写为 C++ 数组,但是我遇到了不知道如何解决的问题。

运行此代码时出现错误 -[SMFiniteDifferenceHelper matrixHandler]: unrecognized selector sent to instance 0x100107cb0 即使我的方法在头文件中并在类中实现。但是,如果我只保留一个 array[][] 值未设置,代码运行正常...

中断

self.matrixHandler = [[SMMatrixHandler alloc] init];

double **array1 = (double **)malloc(3*2*sizeof(double)); // height
for (int i = 0; i < 3; ++i)
array1[i] = new double[2]; // width

array1[0][0] = 1.0;
array1[1][0] = 2.0;
array1[0][1] = 1.0;
array1[1][1] = 0.0;
array1[0][2] = 4.0;
array1[1][2] = 1.0;

NSLog(@"array 1 : \n%@",[self.matrixHandler stringForMatrix:array1 ofSize:CGSizeMake(2, 3)]);

工作正常

self.matrixHandler = [[SMMatrixHandler alloc] init];

double **array1 = (double **)malloc(3*2*sizeof(double)); // height
for (int i = 0; i < 3; ++i)
array1[i] = new double[2]; // width

array1[0][0] = 1.0;
array1[1][0] = 2.0;
array1[0][1] = 1.0;
array1[1][1] = 0.0;
// array1[0][2] = 4.0;
array1[1][2] = 1.0;

NSLog(@"array 1 : \n%@",[self.matrixHandler stringForMatrix:array1 ofSize:CGSizeMake(2, 3)]);

stringForArray 方法如下所示:

- (NSString *)stringForMatrix:(double **)m ofSize:(CGSize)s {

NSString *string = @"";

for (int i = 0; i < s.height; i++) {

for (int j = 0; j < s.width; j++) {

string = [string stringByAppendingFormat:@"%f ",m[j][i]];

}

string = [string stringByAppendingString:@"\n"];

}

return string;

}

最佳答案

您的尺寸计算不正确,因为它们与您的用法不匹配。这段代码

double **array1 = (double **)malloc(3*2*sizeof(double)); // height

为六个人分配空间 double s,但它被用作存储指向 double 的三个指针.

由于您正在编写 C++ 代码,而不是 C 代码,因此您可以选择使用 std::vector容器 - 此类情况的首选。它使您无需手动管理内存,并为您提供与这些原始数组相匹配的执行速度。

添加#include <vector>在顶部,然后按如下方式更改声明:

std::vector<std::vector<double> > array1(3, std::vector<double>(2, 0.0));

使用数组的代码保持不变。

关于objective-c 中的 C++ 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19810221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com