【发布时间】:2014-12-10 01:24:09
【问题描述】:
我正在编写一个家庭作业程序,但遇到了一个奇怪的问题。当尝试使用 size() 函数获取 2D 向量的大小时,我得到看似随机的大整数,这会阻止我的程序运行。我需要大小才能访问向量中的元素。
我的头文件:
#ifndef _MATRIX_H
#define _MATRIX_H
#include <iostream>
#include <vector>
class Matrix {
private:
//int dimension;
std::vector< std::vector<int> > matrix;
public:
Matrix();
Matrix(std::vector< std::vector<int> >);
void print();
Matrix operator-(Matrix operand);
};
#endif
我的实现文件:
#include "Matrix.h"
#include <iostream>
#include <vector>
// Default constructor
Matrix::Matrix() {
}
// Parameterized constructor
Matrix::Matrix(std::vector< std::vector<int> >) {
}
void Matrix::print() {
std::cout << "Size of matrix in print() " << matrix.size() << std::endl;
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix.size(); j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
}
Matrix Matrix::operator-(Matrix operand) {
Matrix difference;
std::vector< std::vector<int> > diffMatrix;
diffMatrix.resize(matrix.size());
for (int i = 0; i < matrix.size(); i++ ) {
diffMatrix[i].resize(matrix.size());
}
difference.matrix = diffMatrix;
if (operand.matrix.size() == matrix.size()) {
for (int i = 0; i < operand.matrix.size(); i++) {
for (int j = 0; j < operand.matrix.size(); j++) {
difference.matrix[i][j] = matrix[i][j] - operand.matrix[i][j];
}
}
}
}
还有我的 main.cpp 文件:
#include "Matrix.h"
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
vector< vector<int> > testMatrixOne(4);
vector< vector<int> > testMatrixTwo(4);
// Creating a test matrix
testMatrixOne = {{1,2},{3,4}};
testMatrixTwo = {{5,6},{7,8}};
// Create Matrix object
Matrix matrixOne(testMatrixOne);
Matrix matrixTwo(testMatrixTwo);
// Create Matrix to store difference
Matrix diff;
diff = matrixOne - matrixTwo;
diff.print();
return 0;
}
我已经简化了我的代码并在两个矩阵中进行了硬编码。运行程序时,size() 将返回一个非常大的整数。我花了几个小时在网上搜索,但找不到原因。为什么 size() 函数会这样做?
【问题讨论】:
-
Matrix的构造函数从不初始化dimension -
Matrix::Matrix(std::vector< std::vector<int> >)将矩阵留空,这就是您使用的构造函数。 -
这段代码中还有几个地方应该使用
j < matrix[i].size()作为终止限制,而不是j < matrix.size()。 -
@Adam 整个代码假定为方阵,这本身不应该导致问题
-
是的,
operator-缺少return-- 你的编译器没有抱怨吗?
标签: c++ vector operator-overloading