双打编辑的 2D 矢量导致崩溃
2D Vector of Doubles editing causing crash
我正在研究一个 C++ class,它由一个 2D Vector of Double 组成。我正要创建 2D Vector,但是当我尝试编辑其中的值时,程序崩溃了。我曾尝试使用 [][] 运算符并将其设置为等于 myDub,并且我曾尝试使用 class 之类的 myMat.editSlot(i,j,myDub) 并且两者都导致程序崩溃。
//n == # of rows and cols(所有矩阵都是正方形的)
//infile正确打开文件
mat my_mat(n,n);
// Read input data
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
double myDub;
inFile >> myDub;
my_mat.editSlot(i,j,myDub);
}
}
这里是 class:
class mat
{
mat( int x , int y ) {
int row = x;
int col = y;
vector<vector<double>> A( row , vector<double>( row , 0 ) );
for ( int i = 0; i<row; i++ )
{
for ( int j = 0; j<col; j++ )
{
cout << setw( 6 ) << A[i][j];
}
cout << endl;
}
}
void editSlot( int x , int y , double val ) {
A[x][y] = val;
}
vector<vector<double>> A;
private:
int n;
};
在我看来,您初始化 A
的方式是错误的。尝试这样的事情:
A = vector<vector<double>>( row , vector<double>( row , 0 ) );
另一件需要考虑的事情是构造函数和编辑函数都没有声明 public。
导致崩溃的主要问题是您在构造函数中更改了时间向量 A 的大小,而您在 class 对象中声明为字段的向量 A 未被触及。
我建议这样做:
mat(int x,int y) : A(y,vector<double>(x,0)) {
int row = x;
int col = y;
for(int i=0; i<row; i++)
{
for(int j=0; j<col; j++)
{
cout<<setw(6)<<A[i][j];
}
cout<<endl;
}
}
}
在这种情况下,您不会在构造函数中使用临时 A 对象隐藏 class 中的 A 字段。
另外请注意不要在函数中交换 x 和 y。例如,您的 editSlot 函数有错误:
void editSlot( int x , int y , double val ) {
A[x][y] = val;
}
,应该是:
A[y][x] = val;
根据构造函数。
我正在研究一个 C++ class,它由一个 2D Vector of Double 组成。我正要创建 2D Vector,但是当我尝试编辑其中的值时,程序崩溃了。我曾尝试使用 [][] 运算符并将其设置为等于 myDub,并且我曾尝试使用 class 之类的 myMat.editSlot(i,j,myDub) 并且两者都导致程序崩溃。
//n == # of rows and cols(所有矩阵都是正方形的) //infile正确打开文件
mat my_mat(n,n);
// Read input data
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
double myDub;
inFile >> myDub;
my_mat.editSlot(i,j,myDub);
}
}
这里是 class:
class mat
{
mat( int x , int y ) {
int row = x;
int col = y;
vector<vector<double>> A( row , vector<double>( row , 0 ) );
for ( int i = 0; i<row; i++ )
{
for ( int j = 0; j<col; j++ )
{
cout << setw( 6 ) << A[i][j];
}
cout << endl;
}
}
void editSlot( int x , int y , double val ) {
A[x][y] = val;
}
vector<vector<double>> A;
private:
int n;
};
在我看来,您初始化 A
的方式是错误的。尝试这样的事情:
A = vector<vector<double>>( row , vector<double>( row , 0 ) );
另一件需要考虑的事情是构造函数和编辑函数都没有声明 public。
导致崩溃的主要问题是您在构造函数中更改了时间向量 A 的大小,而您在 class 对象中声明为字段的向量 A 未被触及。 我建议这样做:
mat(int x,int y) : A(y,vector<double>(x,0)) {
int row = x;
int col = y;
for(int i=0; i<row; i++)
{
for(int j=0; j<col; j++)
{
cout<<setw(6)<<A[i][j];
}
cout<<endl;
}
}
}
在这种情况下,您不会在构造函数中使用临时 A 对象隐藏 class 中的 A 字段。 另外请注意不要在函数中交换 x 和 y。例如,您的 editSlot 函数有错误:
void editSlot( int x , int y , double val ) {
A[x][y] = val;
}
,应该是:
A[y][x] = val;
根据构造函数。