У меня есть такой код:
template <typename T>
void Matrix<T>::loadMatrix()
{
for (auto& item : matrix)
{
for (auto& nestedItem : item)
{
file >> nestedItem;
}
}
}
Когда я использую эту версию, я могу вставить в эту матрицу (которая является std :: vector>) только 28800 элементов. Когда я использую эту версию:
template <typename T>
void Matrix<T>::loadMatrix()
{
T buffer = 0;
for (auto& item : matrix)
{
for (auto& nestedItem : item)
{
file >> buffer;
nestedItem = buffer;
}
}
}
каждый необходимый элемент хранится в матрице. Почему так работает?
Минимальный рабочий пример:
#include <iostream>
#include <vector>
#include <fstream>
template <class T>
class Matrix
{
public:
Matrix()
{
}
void readFromFile(const std::string& path)
{
filePath = path;
openFile();
getMatrixSize();
resizeVectors();
loadMatrix();
}
private:
void openFile()
{
file.open(filePath);
}
void getMatrixSize()
{
file >> matrixSize[0];
file >> matrixSize[1];
}
void resizeVectors()
{
matrix.resize(matrixSize[0]);
for (auto& item : matrix)
{
item.resize(matrixSize[1]);
}
}
void loadMatrix()
{
for (auto& item : matrix)
{
for (auto& nestedItem : item)
{
file >> nestedItem;
std::cout << nestedItem << std::endl;
}
}
}
private:
std::string filePath;
std::ifstream file;
int matrixSize[2];
std::vector<std::vector<T>> matrix;
};
int main()
{
Matrix<int> firstMatrix;
firstMatrix.readFromFile("matrix_1.txt");
}
Где matrix_1.txt - это что-то вроде:
240 240
1 1 1 ... 1
.
.
.
1 1 1 ... 1