C ++ Как добавить вектор в вектор? vector.push_back (vector <>)? - PullRequest
0 голосов
/ 27 мая 2019

Я создаю 2-мерный векторный массив символов char как переменную класса, но у меня возникают проблемы с добавлением вектора в векторный массив .

Я использую gcc со стандартом C ++ 11.

Я пытался использовать vector< vector<char> > row(size, vector<char> );, но будут отображаться ошибки, говорящие о том, что я не определил size и vector<char>. Если я определю его с помощью int size и vector<char> col, он подумает, что это новое объявление функции, поскольку я помещаю его как переменную класса.

Поэтому я использую обычный метод vector< vector<char> > row; и у меня есть функция, чтобы добавить в нее еще один вектор. Поэтому я использую this->row[i].push_back( vector<char> col);, но затем появляется сообщение об ошибке error: expected primary-expression before ‘col’. Я также попытался использовать только this->row[i].push_back( vector<char> );, но ошибка все еще там говорит: error: expected primary-expression before ‘)’. Это может быть глупо, но я не знаю, как добавить вектор в вектор.

class Vector2d {
private:
  int size;
  vector< vector<char> > row;
public:
  void make2d();
};

void Vector2d::make2d() {
  for (int i = 0; i < this->size; i++) {
    this->row[i].push_back( vector<char> col );  // compile error here
    for (int j = 0; j < this->size; j++) {
      this->row[i][j];
    }
  }
  cout << "It works!" << endl;
}

Я ожидаю, что он добавит векторный массив в векторный массив, и что я могу использовать row[i][j] для остальной части программы. Но это выдает ошибку компилятора: error: expected primary-expression before ‘col’ Я понятия не имею, что делать.

1 Ответ

5 голосов
/ 27 мая 2019

vector<char> col не является допустимым выражением.Это почти похоже на объявление переменной (что здесь не то, что вам нужно), за исключением того, что для завершения оператора не хватает точки с запятой.

Более того, вы не можете получить доступ к row[i], пока row фактически не содержитминимум i элементов.row[i].push_back пытается вставить элемент char в std::vector<char>, который является i -ым элементом вектора векторов (за исключением того, что вы никогда не создавали i th-элемент).

Учитывая, что вВ следующем цикле вы предполагаете, что вставленный вектор должен иметь size элементов, вот как вставить один вектор из size элементов в вектор векторов:

row.push_back(std::vector<char>(size));
// or more simply
row.emplace_back(size);

Если вы хотитевместо этого вставьте пустой вектор, просто используйте:

row.emplace_back();

И вот как вы можете вставить все size векторов size элементов за один раз, чтобы вы могли использовать row[i][j] для всех i и j меньше size:

row.resize(size, std::vector<char>(size));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...