Правильная реализация 2d векторной популяции - PullRequest
0 голосов
/ 16 марта 2019

У меня есть конструктор и метод в файле реализации:

Boggle::Boggle(std::string boardString){

dim = sqrt(boardString.size());
vector<vector<char> > grid(dim, vector<char>(dim));
int co = 0;
for (int i = 0; i < dim; i++)
{
    for (int j = 0; j < dim; j++)
    {
        grid[i][j] = boardString[co];
        co++;
    }    
}
}

void Boggle::printMe() {

for (auto inner : grid)
{
    for (auto item : inner)
    {
        cout << item << " ";
    }
    cout << endl;
}
}

Программа выполняется, но ничего не делает. Как вы можете видеть, я измерил свой вектор, когда я это объявил. Я полагаю, что проблема заключается в моей логике назначения символа для вектора из строки, возможно.

1 Ответ

0 голосов
/ 16 марта 2019

Как указано в комментариях, ваш вектор grid является локальным для вашей функции. Вы, скорее всего, хотели использовать переменную класса, но в итоге создали локальную переменную Вы можете использовать resize, чтобы установить размеры вашей сетки. Также лучше ceil sqrt, чтобы убедиться, что мы не пропустили ни одного символа.

Пример:

#include <stdio.h>
#include <vector>
#include <string>
#include <cmath>
#include <iostream>

using namespace std; // Avoid this

class Boggle{

    public:
    int dim;
    vector<vector<char>> grid;

    Boggle(string boardString);
    void printMe();

};


Boggle::Boggle (std::string boardString)
{

  dim = ceil(sqrt(boardString.size ()));
  grid.resize(dim, vector <char>(dim));
  int co = 0;
  for (int i = 0; i < dim; i++) {
    for (int j = 0; j < dim; j++)
    {
      grid[i][j] = boardString[co];
      co++;
    }
  }
}

void Boggle::printMe ()
{

    for (auto inner:grid) {

        for (auto item:inner)
        {
          cout << item << " ";
        }

        cout << endl;
    }
}

int main(){

    Boggle boggle("hello world");

    boggle.printMe();

    return 0;
}


Результат:
h e l l

o w o

r l d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...