• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dwuwymiarowy kontener deque

Object Storage Arubacloud
+1 głos
296 wizyt
pytanie zadane 17 lipca 2015 w C i C++ przez Dash Nałogowiec (29,650 p.)

Na potrzeby aplikacji potrzebuję deque który będzie przechowywał deque przechowujący wskaźniki na klasę. Kombinowanie takie jest mi potrzebne aby swobodnie móc dodawać ilość obiektów klasy w kontenerze oraz ilość samych kontenerów. Sam nie potrafię takiego czekoś stworzyć: 

deque <deque <moja_klasa*>> nazwa;
----------------------------------------------------
for (int i=0; i<ilosc_obiektow; i++)
nazwa.push_front(deque<moja_klasa*>);
TEN KOD TOTALNIE NIE DZIALA

 

Dla mających więcej czasu :)    : 

Staram się stworzyć dynamicznie wczytywaną mapę złożoną z kafelków(obieków klasy). Przy rozmiarach mapy powiedzmy 10x10 kafelków, poruszanie w lewo i prawo robię przy pomocy 10 deque, usuwam obiekty znajdujące się na początku/końcu, następnie usuwam je z kontenera i dynamicznie alokuje nowe, wpychając na drugim końcu. Jedna tablica = jeden wiersz tak w skrócie. Problem zaczyna się w momencie przesuwania w pionie. Planuje dodawać nową tablicę, zapełniać ją obiektami, a tą z drugiej strony usuwać. Nie wiem jak będzie wygladała wydajność takiego monstrum oraz czy istnieje jakis lepszy sposób. Zastrzegam że właściwości kafelka są zapisane poza programem, więc sam obiekt musi być tworzony dynamicznie gdy jest potrzebny.  Potrzebuję czegoś na kształt macierza. 

2 odpowiedzi

+1 głos
odpowiedź 17 lipca 2015 przez Buby Pasjonat (19,590 p.)
wybrane 17 lipca 2015 przez Dash
 
Najlepsza

W ten sposób się tego nie robi kolego i mówię tutaj o metodzie push_front - ona oczekuje rzeczywistego obiektu, a nie typu wartości. Spójrz, przerobiłem troszeczkę twój kod - myślę, że zrozumiesz - tworzę przykładowy obiekt i dopiero go wrzucam do kontenera jako jeden z wierszy/kolumn, zależy jak na to patrzeć twojej tablicy.

Kod:

#include <deque>
#include <iostream>

class moja_klasa //przykladowa klasa
{
    public:
        moja_klasa(int n):x(n)
        {}
        int x;
};

using namespace std;
int main( void )
{
    deque <deque <moja_klasa*> > nazwa;
    int ilosc_obiektow = 3; //dla testow

    //Wypelniam tablice
    for (int i=0; i<ilosc_obiektow; i++)
    {
        deque<moja_klasa*>temp;
        temp.push_front(new moja_klasa(i)); //Przykladowa inicjalizacja konstruktorem dynamicznie
        
        moja_klasa nowy(i);
        temp.push_front(&nowy); //wrzucam adres isteniejacego obiektu
/* Tak nie robic, poniewaz po wyjsciu z petli adres ten wskazuje smieci w pamieci */
        
        nazwa.push_front(temp); //na koniec wrzucam do glownej tablicy jej jeden wymiar
    }

    return 0;
}

Co do samego kodu, tworzenie obiektu w pętli i zwracanie jego adresu jest naganną rzeczą, bo po wyjściu z pętli ten adres nie będzie się już odnosił do obiektu. Chciałem tylko pokazać, że możesz też wrzucic adres isteniejacego obiektu. :)

Pozdrawiam!

komentarz 17 lipca 2015 przez Dash Nałogowiec (29,650 p.)
Zrobiłem coś podobnego i działa, bez wycieku pamięci (chyba). Wielkie dzięki :)
+1 głos
odpowiedź 17 lipca 2015 przez adrian17 Ekspert (344,860 p.)

Albo prościej, korzystając z konstruktorów deque:

	// tworzenie samych deque

	deque<deque<moja_klasa*>> nazwa(10, deque<moja_klasa*>(10));

	// lub tak, troche czytelniej:
	auto nazwa2 = deque<deque<moja_klasa*>>(10,
		deque<moja_klasa*>(10));

	// samo alokowanie elementow twojej klasy:

	for (auto &rzad : nazwa)
		for (auto &element : rzad)
			element = new moja_klasa;

(Nie rozumiem do końca rozumowania czemu obiekty muszą być dynamiczne, ale jak chcesz)

Podobne pytania

0 głosów
1 odpowiedź 1,052 wizyt
pytanie zadane 3 września 2016 w C i C++ przez niezalogowany
+2 głosów
1 odpowiedź 10,831 wizyt
pytanie zadane 27 maja 2015 w C i C++ przez iwan9449 Pasjonat (20,810 p.)
0 głosów
2 odpowiedzi 159 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez niezalogowany

92,556 zapytań

141,404 odpowiedzi

319,563 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...