1

我在 Visual C++ 2008 的 MFC 应用程序项目中使用向量和矩阵(Vec_DP 和 Mat_DP,来自版本 2)的数值配方定义。我正在玩弄这些定义以了解它们是如何工作的,我想我明白了大多数情况下,但在我的程序中,我需要一个重置功能来“清除”所使用的向量和矩阵的内容。

我已经尝试过 delete(mat)、delete[] (mat)、free(mat)、mat.~NRMat(),但之前的工作都没有。我最初的解决方案是创建一个循环并将所有元素都归零,但它应该是一个更优雅的解决方案,有什么想法吗?

我的代码示例:

#include "stdafx.h"
#include <math.h>
#include <cmath>
#include <stdio.h>
#include "nrtypes.h"
#include "nrutil.h"

void TestFunc(Vec_I_DP &data);
void printVecDP(Vec_I_DP & v);
void printMatDP (Mat_I_DP & m);

Mat_DP mat(5,6);
Mat_DP mat2;
Mat_DP (*kktest);  

int main()
{
    DP v[] = {3.2, 8.2, 5.5, 2.1, 3.0};
    Vec_DP vdp(v, 5);
    Vec_DP vdp2; 

    vdp2 = vdp;
    cout << " Here's vdp: " << endl;
    printVecDP(vdp);
    cout << " Here's vdp2:" << endl;
    printVecDP(vdp2);

    TestFunc(vdp2);
    cout << " matrix:" << endl;
    printMatDP(mat);
    printMatDP(mat2);
    cout << " matrix2:" << endl;
    printMatDP(*kktest);

    /* none of this is working */
    //mat.~NRMat();  
    //~NRMat(mat);
    //delete[](mat);
    //free(mat);

    for (int i=0; i<mat.nrows(); i++){
        for (int j=0; j<mat.ncols(); j++){
            mat[i][j] = 0;
        }
    }

    cout << " matrix:" << endl;
    printMatDP(mat);
    printMatDP(mat2);
    cout << " matrix2:" << endl;
    printMatDP(*kktest);

    return 0;
}

void TestFunc(Vec_I_DP &data)
{
    int n, m, t=data.size();
    Vec_DP rsp = data;  
    for (n=0; n<t; n++)
        rsp[n] = data[n]*10.0;


    for (n=0; n<t; n++){
        for (m=0; m<6; m++){
            mat[n][m] = rsp[n];
        }
    }
    mat2=mat;
    kktest = &mat;
}

void printVecDP (Vec_I_DP & v)
{
    if (v.size() == 0) {
        cout << " In printVecDP: The vector is empty." << endl;
    }
    else {
        for (int i = 0; i < v.size(); i++) {
            cout << " v[" << i << "] = " << v[i] << endl;
        }
    }
    cout << endl;
}

void printMatDP (Mat_I_DP & m)
{
    if ((m.nrows() == 0) | (m.ncols() ==0)) {
        cout << " In printMatDP: The matrix is empty." << endl;
    }
    else {
        for (int i = 0; i < m.nrows(); i++) {
            for (int j = 0; j < m.ncols(); j++) {
                cout << " m["<<i<<"]"<<"["<<j<<"] = " << m[i][j];
            }
            cout << endl;
        }
    }
    cout << endl;
}

PS:我会在 NR 论坛上提问,但我无法发布任何新帖子,要么是因为特权,要么是因为论坛已关闭新帖子。

4

0 回答 0