tablice z wektorów

tablice z wektorów
SK
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:80
0

W jaki sposób powinno się zaimplementować tablicę z wektorów (zamiast tablicy dynamicznej) ?

Przychodzi mi na myśl tylko :

Kopiuj
vector<double> tmp[size];
for( int b = 0; b < size; b++ ) 
    tmp[b] = vector<double>;

ale to jest źle. W jaki sposób powinienem to zrobić ?

edytowany 1x, ostatnio: skolukmar
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
0
Kopiuj
vector<vector<double> >

a jak już koniecznie chcesz tablicę, to po prostu

Kopiuj
vector<double> tmp[size];

i koniec. bez tej pętli.

Zauważ, że jest to już tablica wektorów, a nie wskaźników na wektory.
A skoro jest to tablica pewnych obiektów, to te obiekty już istnieją — tak samo jak inty w tablicy intów od razu istnieją, nie musisz ich tworzyć czy alokować.

edytowany 2x, ostatnio: Azarien
matek3005
teraz ja wspomnę o zmianach i poprawkach w c++11 i zauważę, że poprawiono już problem operatora ">>", który kolidował z domknięciem ostrych nawiasów ;)
KR
póki co za mało osób jeszcze go używa, więc lepiej zrobić spacje, w innym wypadku zaraz pojawi się "nie działa"
SK
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:80
0

Potrzebuję mieć tablicę o size wierszach i nieznanej liczbie kolumn.

Wtedy piszę:

Kopiuj
double tmp[size] = vector<double>

?

edytowany 1x, ostatnio: skolukmar
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0

Właściwie to trudno tu mówić o kolumnach, ponieważ w każdym wierszu ilość tych "kolumn" jest inna.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
0

przecież już ci powiedziałem.

Kopiuj
vector<double> tmp[size];

To jest tablica określonej liczby (size) wektorów double'i.
Koniec, kropka. Przykładowe użycie:

Kopiuj
tmp[0].push_back(4.78);
tmp[0].push_back(3.14);
tmp[size-1].push_back(5.00);
tmp[1] = { 1, 2, 3.11, 4.90, 5.10 }; // tylko nowe kompilatory
edytowany 1x, ostatnio: Azarien
ZJ
Nie wiem, czy to tmp[1] to zadziała. Lista inicjalizacyjna jest przy wywołaniu konstruktora, a nie operatora przypisania. O ile dobrze pamiętam to gcc przez pewien czas to przyjmowało, potem przestało.
Azarien
W 4.6.2 działa. Jeśli usunięto, to dupa. Bo na oko powinno to działać.
Azarien
działa pod wersją "gcc version 4.8.0 20120506 (experimental) (FreeBSD Ports Collection)"
ZJ
Może to było coś innego (ale też z listami inicjalizacyjnymi), jakby się zastanowić to powinna być konwersja initializer_list -> vector. Spróbuje później poszukać dokładnie (i zobaczyć, czy działa w clangu).
Endrju
{ 1, 2, ... } zrobi std::initializer_list<T>. Na tej podstawie zostanie wywołany konstruktor std::vector<T>(std::initializer_list<T>) a potem będzie działać operator przypisania. Edit: http://ideone.com/cxOS3
SK
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:80
0

Dzięki

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.