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

Dwuwymiarowy kontener deque

VPS Starter Arubacloud
+1 głos
354 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 (349,960 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,115 wizyt
pytanie zadane 3 września 2016 w C i C++ przez niezalogowany
+2 głosów
1 odpowiedź 11,170 wizyt
pytanie zadane 27 maja 2015 w C i C++ przez iwan9449 Pasjonat (20,810 p.)
0 głosów
2 odpowiedzi 229 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez niezalogowany

93,024 zapytań

141,986 odpowiedzi

321,291 komentarzy

62,371 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...