Autor Wątek: obiekty i tablice  (Przeczytany 2301 razy)

Offline Frondeus

  • Użytkownik

# Marzec 21, 2008, 09:00:37
Mam pytanie odnoszace sie do obiektow,
Jak obslugiwac wszystkie na raz(obiekty) z tej samej klasy? chodzi mi o to ze po kolei w kazdym obiekcie np. zmieniala sie zmienna, czy wywolywala metoda.
Lecz nie chce zeby obiekty byly w Tablicy, bowiem w koncu tablica sie wyczerpie, a ja musze dodawac obiekty np. w nieskonczonosc (mialem na mysli , np. do gry- tworzysz przedmiot, to obiekt ktory jest tym przedmiotem musi istniec, i obojetnie ile np. mieczy gracz wykuje to nigdy nie bedzie granicy- tej w programie)...
Moglby mi ktos pokazac jak to zrobic w c++?


//Przyklad
Mam  np. 100 klas A
i chce w przyszlosci dodac jeszcze n klas,
oraz odczytac wartosci z zmiennych z tych klas..
//=============


Bardzo prosze o pomoc


Mam nadzieje ze w pytaniu wyrazilem sie jasno ...

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline k_b

  • Użytkownik
    • Blog

# Marzec 21, 2008, 09:02:49
Doczytaj w kursie C++ rozdział o dynamicznie zarządzanej pamięci.

Offline Pierdek

  • Użytkownik

# Marzec 21, 2008, 09:03:33

Offline Frondeus

  • Użytkownik

# Marzec 21, 2008, 09:04:30
A o jaki kurs chodzi? (Megatutorial Xiona?)

Offline k_b

  • Użytkownik
    • Blog

# Marzec 21, 2008, 09:05:50
A o jaki kurs chodzi? (Megatutorial Xiona?)

Każdy.

Offline kombain

  • Użytkownik

# Marzec 21, 2008, 10:09:25

Offline _MtZ_

  • Użytkownik

# Marzec 21, 2008, 10:17:31
A tam lista. Po prostu skorzystaj ze struktury danych zwanej vectorem. Pierdek podał link. A ja jeszcze dorzucę kod:
Cytuj
#include <vector>
#include <iostream>

int main()
{

   std::vector<int> tab;   // Deklaracja zmiennej

   // Dodanie elementów
   tab.push_back(12);
   tab.push_back(5);
   tab.push_back(9);

   // Wypisanie zawartości tablicy
   for(unsigned int i=0; i < tab.size(); i++)
      printf("%d\n", tab.at(i));

   return 0;
}


Jak bedziesz miał jakieś problemy to pisz na gg :)

RageX

  • Gość
# Marzec 21, 2008, 10:33:32
        // ...
// for(unsigned int i=0; i < tab.size(); i++)
for(size_t i=0; i < tab.size(); i++)
        // ...
Drobna zmiana. Na maszynach nie 32-bitowych uint nie musi być równy size_t.

Offline Xion

  • Moderator
    • xion.log

# Marzec 21, 2008, 11:46:30
Użyj jakiegoś pojemnika, czyli obiektu, który służy do przechowywania kolekcji innych obiektów. W C++ kilka rodzajów takich pojemników jest częścią STL. Te, które mogą cię potencjalnie interesować to:

- wektor (std::vector), czyli dynamiczna tablica. Pozwala na łatwy dostęp do elementów po indeksie. Wada: potencjalnie długie czasy dodawania i usuwania elementów.

- lista (std::list) pozwala na bardzo szybkie dodawanie elementów, lecz przeglądać ją można tylko po kolei.

- zbiór (std::set) pozwala na szybkie dodawanie i usuwanie elementów, lecz przeglądać go można też tylko w określonym porządku.

Zwykle dobrym wyborem jest lista, jeśli chce się tylko przeglądać obiekty i rzadko je usuwać. Pewnym mankamentem może być jednak to, że jej przeglądanie wymaga użycia iteratorów.

Offline yarpen

  • Użytkownik

# Marzec 21, 2008, 12:03:35
Zwykle dobrym wyborem jest lista, jeśli chce się tylko przeglądać obiekty i rzadko je usuwać. Pewnym mankamentem może być jednak to, że jej przeglądanie wymaga użycia iteratorów.
I ma najwieksze zapotrzebowania pamieciowe, najgorzej wykorzystuje cache itd. Na konsolach unikac.

RageX

  • Gość
# Marzec 21, 2008, 12:51:12
//Przyklad
Mam  np. 100 klas A
i chce w przyszlosci dodac jeszcze n klas,
oraz odczytac wartosci z zmiennych z tych klas..
//=============
100 instancji klasy A jak coś... Możesz mieć 100 różnych klas ale nie 100 klas A.

Co do struktur...
Panowie wyżej, dobrze radzą. Na początek odradzałbym przejmować się takim bzdetami jak zła, niewydajna implementacja listy w STD. Naucz się dobierać odpowiednie struktury do potrzeb najpierw. W ogóle poczytaj czym są te struktury.

Na początek można wszystko trzymać w tablicach, czy Vectorach nie znając zasady ich działania. Ale jak idziesz dalej (znaczy idea tablic, iteratorów nie jest ci obca) to poznaj najpopularniejsze struktury. Najpierw liniowe: tablice, listy(Vector) w tym lista łączona, stos, kolejka. Potem nieliniowe... czyli między innymi różne rodzaje drzew.

Jak będziesz znał zasady działania poszczególnych, nie powinieneś mieć problemów z napisaniem własnej implementacji danej struktury.

Offline Xion

  • Moderator
    • xion.log

# Marzec 21, 2008, 13:27:28
Zwykle dobrym wyborem jest lista, jeśli chce się tylko przeglądać obiekty i rzadko je usuwać. Pewnym mankamentem może być jednak to, że jej przeglądanie wymaga użycia iteratorów.
I ma najwieksze zapotrzebowania pamieciowe, najgorzej wykorzystuje cache itd. Na konsolach unikac.
Osobiście nie sądzę, żeby np. set był wiele lepszy ;P

Offline Frondeus

  • Użytkownik

# Marzec 21, 2008, 14:24:02
Cytuj
Mam  np. 100 klas A

Pomylka/przejezyczenie:
Mam 100 obiektow klasy A
i chce w przyszlosci dodac jeszcze n biektow(tej klasy A)
oraz odzczytywac wartosci z tych obiektow.

Offline Frondeus

  • Użytkownik

# Marzec 21, 2008, 14:34:49
Vectory mi wystarcza, dziekuje za odp.

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Marzec 22, 2008, 10:31:28
Zwykle dobrym wyborem jest lista, jeśli chce się tylko przeglądać obiekty i rzadko je usuwać. Pewnym mankamentem może być jednak to, że jej przeglądanie wymaga użycia iteratorów.
I ma najwieksze zapotrzebowania pamieciowe, najgorzej wykorzystuje cache itd. Na konsolach unikac.
Jeśli nie listy, to co? Jak radzici sobie wobec tego na konsolach z takimi kolekcjami obiektów, w których trzeba często coś usuwać z środka?