我在 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 论坛上提问,但我无法发布任何新帖子,要么是因为特权,要么是因为论坛已关闭新帖子。