Dziwne działanie vectorór

Dziwne działanie vectorór
DA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
0

Witam,
mam napisaną grę saper w C++ gdzie plansza jest dwuwymiarową tablicą.
Kod programu: http://wklej.org/id/1749491/

Taki to wygląda w konsoli:
user image
(wartość pół jest początkowo na 0 - celowo odkryte)

Jednak jestem zmuszony przepisać program z tablic na wektory, żeby na początku móc wybrać sobie rozmiar mapy (obecnie rozmiar tablicy jest zdefiniowany w stałych).

Zdefiniowałem dwuwymiarowy wektor typu struct i pozamieniałem tablice na niego. Tylko pojawił się problem wykraczający poza moją wiedzę i zupełnie nie rozumiem dlaczego, ale przy przypisywaniu wartości 0 pojedynczemu elementowi z tego dwuwymiarowego wektora po kilku dalszych iteracjach przypisywana jest jakaś liczba z kosmosu. I nie wiem czemu tak się to dzieje. :/

Kod programu: http://wklej.org/id/1749480/
Tak to wygląda w konsoli:
user image

Nakieruje mnie ktoś w czym może być problem?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

(obecnie rozmiar tablicy jest zdefiniowany w stałych).

A kto Ci broni zrobić cośtam** mapa = new cośtam[szerokość][wysokość];?

Twoim problemem jest to, że błędnie generujesz tę mapę, na oko poprawnie będzie:

Kopiuj
      for(int y=0;y<ylength;y++) {
            vector<field> tmp;

            for(int x=0;x<xlength;x++) {
                field tmpField;
                tmpField.value = 0;
                tmpField.display = false;
                tmpField.flag = false;

                tmp.push_back(tmpField);
            }

            gridOuter.push_back(gridInner);
        }

I w imię wszystkiego co dobre, zmieńże nazwę tego pola klasy na coś sensownego, jak choćby map, a nie jakieś gridyoutry i gridyintry i kij wie w sumie po co one są oraz czym się różnią.

Btw, język angielski bogaty jest w pełno różnych słów, niektórymi z nich są choćby width oraz height - wykorzystaj je rozsądnie, a nie length czy xlength.

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
1

to gridOuter.push_back(gridInner); powinieneś mieć dla zewnętrznej pętli a nie dla wewnętrznej

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.