Инициализировать вектор с M элементами пустых векторов c ++ - PullRequest
0 голосов
/ 08 октября 2019

Настройка m_data.resize (a_M) работает, но я хотел бы знать, почему произошла эта ошибка.

error: type 'vector<vector<double> >' does not provide a call operator
  m_data(a_M);

Это начало класса SparseMatrix. Мне нужно инициализировать номер строки a_M и каждый элемент должен быть пустым. Идея состоит в том, чтобы m_data (a_M) инициализировала m_data, чтобы иметь a_M строк пустых векторов, хотя произошла ошибка выше.

class SparseMatrix
{
public:
  SparseMatrix();
  SparseMatrix(int a_M, int a_N);
private:
  unsigned int m_m, m_n;
  double m_zero;
  vector<vector<double> > m_data;
  vector<vector<int> >   m_colIndex;
};

SparseMatrix::SparseMatrix()
{}

SparseMatrix::SparseMatrix(int a_M, int a_N)
{
  m_m = a_M;
  m_n = a_N;
  m_zero = 0.0;
  m_data(a_M);
  m_colIndex(a_M);
}

Я все еще новичок в C ++, поэтому такие мелочи трудно найти в Интернете. Я очень ценю помощь!

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Прежде всего,

m_data = ...;

является присваиванием, а не инициализацией.

Использование

m_data(a_M);
m_colIndex(a_M);

внутри тела конструктора неверно. Используйте

SparseMatrix::SparseMatrix(int a_M, int a_N) : m_m(a_M),
                                               m_n(a_N),
                                               m_zero(0),
                                               m_data(a_M),
                                               m_colIndex(a_M)
{
}

Поскольку переменные-члены m_m и m_n имеют тип unsigned int, я бы предложил изменить конструктор на:

SparseMatrix::SparseMatrix(unsigned int a_M, unsigned int a_N) : m_m(a_M),
                                                                 m_n(a_N),
                                                                 m_zero(0),
                                                                 m_data(a_M),
                                                                 m_colIndex(a_M)
{
}
0 голосов
/ 08 октября 2019
std::vector<std::vector<float>> m_data(M);

или

std::vector<std::vector<float>> m_data;
m_data.resize(M);       //this will resize the vector
for (int i = 0; i < M; i++){
    m_data[i].resize(N);//and this will resize the empty vectors.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...