• 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
293 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,100 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,043 wizyt
pytanie zadane 3 września 2016 w C i C++ przez niezalogowany
+2 głosów
1 odpowiedź 10,760 wizyt
pytanie zadane 27 maja 2015 w C i C++ przez iwan9449 Pasjonat (20,810 p.)
0 głosów
2 odpowiedzi 157 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez niezalogowany

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...