Vector size()返回看似随机的大整数

Vector size() returning seemingly random large integers

本文关键字:随机 整数 size 返回 Vector      更新时间:2023-10-16

我正在编写一个家庭作业程序,遇到了一个奇怪的问题。当试图使用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 Matrix::operator-(Matrix operand) {

从不返回值。这会导致未定义的行为,您看到的症状是-返回垃圾的结果。

在函数的末尾,您的意思是:

    return difference;
}

C++标准不要求编译器对此发出警告,但如果它们发出警告,那还是很好的。我的g++版本没有(即使有-Wall),但是添加标志-Wreturn-type确实会产生警告。IDK为什么这不是-Wall的一部分,至少对于像这样的简单情况。