Próbuję dynamicznie zwiększać rozmiar tablicy. Czy istnieje standardowa funkcja C lub C++, która dodaje dodatkową przestrzeń na końcu tablicy lub ją usuwa? Wiem, to trudne, ponieważ nie można mieć pewności, że na stercie jest wystarczająco dużo miejsca. Ale czy nie powinno to być zadaniem systemu operacyjnego?Dynamicznie zwiększaj/zmniejszaj rozmiar tablicy
Odpowiedz
Funkcja szukasz jest realloc()
w C, który jest również obecny w STL C++ jako std::realloc
chociaż jak pan wspomniał C++, można też pójść na standardowym kontenerze jak std::vector
który hermetyzacji związane zarządzanie pamięcią.
nie zmniejsza rozmiarów, czy **? ** –
cóż, zmniejsza się, gdy wprowadzę mniejszy rozmiar niż poprzednio. Czy to nie jest możliwe? –
@GrijeshChauhan Możesz określić nowy rozmiar niższy od starego rozmiaru tablicy. Standard C określa (7.20.3.4), że 'realloc()' 'zwalnia stary obiekt wskazywany przez ptr i zwraca wskaźnik do nowego obiektu, który ma rozmiar określony przez rozmiar "i że zawartość nowego obiektu jest same do min (oldSize, newSize). – JBL
Nie ma funkcji C jako takich. możesz przejść do kontenera C++. To ma tablice, listy itp ...
prawdopodobnie można to osiągnąć, pisząc własne opakowanie do zarządzania pamięcią w taki sposób, aby dołączyć/zwolnić porcje pamięci z przydzielonej tablicy.
Po wielu eksperymentach przeprowadzonych przez ludzi takich jak profesorowie i inżynierowie (którzy mają rzeczywistą pracę przez kilka lat), rozszerzając tablicę, rozszerz ją o 50%, chyba że posiadasz informacje wewnętrzne, które mówią ci coś innego. realloc() wykonuje również dla ciebie wszystkie ciężkie operacje podnoszenia () (wyjaśnione dalej). Z Internetu: -> Funkcja realloc() zmienia rozmiar bloku pamięci wskazywanego przez ptr na rozmiar bajtów. Zawartość pozostanie niezmieniona w zakresie od początku regionu do minimum starych i nowych rozmiarów. Jeśli nowy rozmiar jest większy niż stary rozmiar, dodana pamięć nie zostanie zainicjowana. Jeśli ptr ma wartość NULL, to wywołanie jest równoważne malloc (rozmiar), dla wszystkich wartości wielkości; jeśli rozmiar jest równy zero, a ptr nie ma wartości NULL, wywołanie jest równoważne swobodnemu (ptr). Jeśli ptr nie ma wartości NULL, musi zostać zwrócone przez wcześniejsze wywołanie metody malloc(), calloc() lub realloc(). Jeśli wskazany obszar został przeniesiony, wykonywane jest wolne (ptr).
- 1. Zwiększenie Array Rozmiar dynamicznie
- 2. Fancybox iframe dynamicznie zmienia rozmiar
- 3. Zmieniaj dynamicznie rozmiar wyskakującego popupbox
- 4. rozmiar tablicy i const
- 5. rozmiar tablicy "__curl_rule_01__" jest ujemny
- 6. Jak dynamicznie zmieniać rozmiar obrazu w Sitecore?
- 7. Jak dynamicznie zmieniać rozmiar okna WPF?
- 8. Jak dynamicznie zmieniać rozmiar iFrame (rozwiązanie crossbrowser)
- 9. Jak dynamicznie zmieniać rozmiar wysokości UITableView?
- 10. Tworzenie tekstu w JLabel dynamicznie zmieniaj rozmiar
- 11. Jak dynamicznie ustawiać klucze tablicy w php
- 12. Cięcie tablicy numpy wzdłuż dynamicznie określonej osi
- 13. Jak dynamicznie dodawać elementy do tablicy String?
- 14. build tablicy json w PHP dynamicznie
- 15. PHP: Zmierz rozmiar w kilobajtach obiektu/tablicy?
- 16. C++ deklaracja rozmiar tablicy i const
- 17. Jak znaleźć rozmiar tablicy w postgresql
- 18. Jaki jest maksymalny rozmiar tablicy w C?
- 19. Rozmiar tablicy ze zmienną stałą w C
- 20. Określa rozmiar tablicy struktur używanej jako parametr
- 21. Kiedy należy zmienić rozmiar tablicy skrótów?
- 22. Jak sizeof zna rozmiar tablicy operandów?
- 23. jak znaleźć rozmiar tablicy 2d w C++
- 24. jeśli rozmiar tablicy jest większa niż 1
- 25. Jak uzyskać rozmiar tablicy przekazywanej do funkcji?
- 26. Jak uzyskać rozmiar pamięci tablicy dynamicznej?
- 27. Jak uzyskać rozmiar tablicy w LUA?
- 28. android: jak mogę uzyskać rozmiar tablicy ciągów?
- 29. Dynamicznie uzyskać rozmiar plików w Amazon S3 Bucket
- 30. Jak dynamicznie zmienić rozmiar elementu iframe w Fancybox 2?
["void * realloc (void * ptr, size_t size);"] (http://www.cplusplus.com/reference/cstdlib/realloc/) Funkcja w C –
Musisz zdecydować, w jakim języku programujesz. W C używałbyś 'realloc'. W C++ użyjesz 'std :: vector'. –