Pętla dla C-array

0

Dostałem coś takiego:

		std::unique_ptr<User[]> users;

W jaki sposób zrobić pętlę for dla każdego elementu i jak sprawdzić ilość elementów w tablicy?

3

Nie da się, musisz przekazać ilość elementów w osobnej zmiennej albo użyć kontenera, np. std::vector czy Boost.PtrVector

0

To w jaki sposób delete[] wie ile bajtów usunąć?

3

Implementation defined. Może adres jest w zakresie alokacji 65-128 bajtów? Może przed wskaźnikiem jest faktyczna ilość elementów? Może gdzieś trzymana jest globalna mapa wskaźnik ⟶ wielkość alokacji? Może jeszcze inaczej? Na to pytanie nie ma sensu odpowiadać o ile nie programujesz pod konkretną wersję kompilatora na konkretną wersję systemu, ale nawet wtedy lepiej po prostu zrobić to dobrze.

0
kq napisał(a):

Implementation defined. Może adres jest w zakresie alokacji 65-128 bajtów? Może przed wskaźnikiem jest faktyczna ilość elementów? Może gdzieś trzymana jest globalna mapa wskaźnik ⟶ wielkość alokacji? Może jeszcze inaczej? Na to pytanie nie ma sensu odpowiadać o ile nie programujesz pod konkretną wersję kompilatora na konkretną wersję systemu, ale nawet wtedy lepiej po prostu zrobić to dobrze.

No to może ci od standardowni powinni dawno wpaść na pomysł w stylu:
sizeofaloc(ptr), który zwracałby rozmiar zaalokowany wcześnie...

czy to prostytutka aż tak trudne jest?

0

byw notabenos: srutututka jest bardziej krótka.

4

Nie widzę sensu. Jak potrzebujesz wielkość to możesz ją w trywialny sposób zapamiętać albo użyć kontenera, a dzięki temu nie ograniczasz implementacji.

0

Bzdet pierdety opowiadasz.

nawet w Windows jest funkcja GlobalSize...
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366593%28v=vs.85%29.aspx

3

Alokacje nie muszą i nie przekładają się jeden do jednego na wywołania api systemowego.

0
kq napisał(a):

Alokacje nie muszą i nie przekładają się jeden do jednego na wywołania api systemowego.

Ale tak jest, bo gdyby było inaczej, wówczas nie byłoby możliwe takie coś:

p = realloc(stary_ptr, new_size);

4

realloc jest funkcją biblioteki standardowej C i nie musi skutkować wywołaniem api systemowego alokującego pamięć. Poczytaj sobie o alokatorach/strategiach alokacji.

0
kq napisał(a):

realloc jest funkcją biblioteki standardowej C i nie musi skutkować wywołaniem api systemowego alokującego pamięć. Poczytaj sobie o alokatorach/strategiach alokacji.

Ty sobie poczytaj... dziecino.

Ja produkuję te bzdety od 30 lat.. prawie, i znam na pamięć.

5

W takim razie możesz szczycić się prawie trzema dekadami partactwa :)

0
kq napisał(a):

W takim razie możesz szczycić się prawie trzema dekadami partactwa :)

Z tego co widać po oprogramowaniu jest zgoła i drastycznie odwrotnie:
obecni programiści produkują gnioty, które są z 1000 razy wolniejsze i 1000 razy większe,
a ponadto mają wycieki ramu, jak i wszelkie inne elementarne wady, typowe dla amatorów.

Zatem wysiad, dziecko - teoretyk programista, hihi!

1 użytkowników online, w tym zalogowanych: 0, gości: 1