Objective-c 中的 C++ 矩阵

标签 c++ objective-c c arrays

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

运行此代码会出现错误 -[SMFiniteDifferenceHelper matrixHandler]: 无法识别的选择器发送到实例 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/

相关文章:

objective-c - 如何在 View 中居中 NSTextField

c - 如何获得足够大的 strcpy 目标字符串?

c++ - 如何将对象添加到指针

c++ - 是什么阻止了 Boost.Format 表单使用我的可选 int 流运算符重载?

ios - uinavigationcontroller - 显示堆栈

Objective-C:复制数组,仅在复制中修改元素(对象)

c++ - 为什么派生类中的虚析构函数为空?

带有模板的 C++ 函数指针参数

c++ - 命令行参数类似于 C++ 中的用户输入

C 指向数组最后一个元素的指针