Невозможно вставить более 28800 элементов в вектор векторов без буфера - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть такой код:

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

...