ruszam z Objective-C, C++ i nie jestem pewien, co wektory są. Czytałem o nich dokumentację, nie jestem jednak całkiem jasny. Jak wytłumaczysz wektory C++ używając analogii Objective-C?Do czego odnosi się wektor C++ w Objective-C?
Odpowiedz
Są one bardzo podobne do NSMutableArrays
, ale vector
jest klasą szablonów, więc można go wdrożyć dla dowolnego typu (standard kompatybilny z biblioteką szablonów). NSArrays
zawsze trzymaj NSObjects
.
Oznacza to, że przy założeniu, że myśli std::vector
.
Są jak NSMutableArrays ale może posiadać dowolny typ danych - wskaźnik, czy nie. Jednak każdy wektor może posiadać tylko jeden typ na raz. Również jako C++ jest mniej funkcji, np. brak ładowania/zapisywania plików plist.
C++ wektor (zapewne na myśli coś takiego std::vector
) jest w zasadzie NSArray
, oprócz tego, że posiada wszelkiego rodzaju chcesz (który jest parametrem szablonu, na przykład std::vector<int>
posiada int
s). Oczywiście, to nie robi zarządzanie pamięcią (co NSArray
robi), ponieważ nie są dowolne typy zachowują liczona. Na przykład: std::vector<id>
byłoby raczej nieodpowiednie (zakładając Obj-C++).
Pomyśl o wektorach jako zaawansowanych macierzy.
Jeśli jesteś nowy w C++, ta strona będzie twoim najlepszym przyjacielem: http://www.cplusplus.com/reference/stl/vector/
NSArray jest owinięcie wokół CFArray. CFArray może przechowywać dowolny typ danych.
Nie wiem zbyt wiele o C++, ale brzmi to tak, jak CFArray może zrobić wszystko, co chcesz użyć wektora? Podczas tworzenia CFArray dasz mu wskaźnik CFArrayCallBacks, który zawiera żadnej logiki, która jest specyficzna dla typu danych są przechowywane.
Oczywiście, zawsze możesz zmienić nazwę pliku Obj-C na * .mm i dodać C++ do celu-c.
W C++ tablica jest w zasadzie tylko wskaźnik do sąsiedniego bloku danych --- szeregu elementów. Nie oferuje żadnych wbudowanych metod ani wyższej funkcjonalności.
int intArr[] = {0,1,2,3};
jest taka sama jak
int *intArr = (int *)malloc(4*sizeof(int));
for(int i = 0; i < 4; i++) { intArr[i] = i; }
wektora (std :: vector), z drugiej strony, jest kontenerem dla elementów (w zasadzie jak tablica), która oferuje także dodatkowe wbudowane w metodach (patrz: http://www.cplusplus.com/reference/stl/vector/), takie jak
vector<int> intArr;
for(int i = 0; i < 4; i++) { intArr.push_back(i); }
// this yields the same content; i.e. intArr = {0,1,2,3}
Obie macierze i wektory mogą być stosowane na wszelkiego rodzaju obiektów, int, double, „MySpacePirateWizardClass” itp duża premia wektorów jest dodatkowy functionalit y z wbudowanych funkcji, takich jak:
int arrSize = intArr.size(); // vector also includes useful information
int *firstElement = intArr.begin(); // methods for creating pointers to elements
intArr.delete(0); // modify elements
intArr.insert(0, 2); // modify vector
// now: intArr = {2,1,2,3}
itp.
Kiedy wiem, że nie będę mało przestrzeni (lub patrzę na ogromne ilości danych), zawsze używam wektorów, ponieważ są one tak wygodne (nawet sama tylko metoda size() jest wystarczającym powodem).
- 1. Wiążące słowo kluczowe odnosi się do czego?
- 2. Do czego odnosi się job.setOutputKeyClass i job.setOutputReduceClass?
- 3. Do czego dokładnie odnosi się znacznik staticcontent w pliku web.config?
- 4. Sieć twórców Mozilli - do czego odnosi się znak zapytania?
- 5. Co odnosi się do adresu AddressFamily.FireFox w gniazdach .NET?
- 6. Typedef, który odnosi się do siebie
- 7. Wdrożenie ObjectiveC protokół w szybkim
- 8. Czy endianness odnosi się do kolejności bitów w bajcie?
- 9. Zmienna, która odnosi się do katalogu projektu w Qt Creator?
- 10. Do czego służy Control.IsHandleCreated?
- 11. co ta informacja o Wiresharku odnosi się do
- 12. Co termin "pusta pętla" odnosi się dokładnie do C i C++?
- 13. Wektor w C++ ze wskaźnikiem
- 14. Do czego służy plik .ctp w CakePHP?
- 15. Generyczny wektor wektorów w C++
- 16. wektor przyszłości w C++ 11
- 17. Kiedy substytucja Liskov odnosi się do podtypów, czy chodzi o klasy pochodne w kontekście C#?
- 18. Czego używasz do testowania kodu C jednostki?
- 19. zainicjować wektor do zera w C++/C++ 11
- 20. Angular 2 element potomny odnosi się do komponentu nadrzędnego
- 21. Zasada pojedynczej odpowiedzialności odnosi się do anemic/rich domain model?
- 22. Twój WSGIPath odnosi się do pliku, który nie istnieje
- 23. Czy zawartość NSData osobno odnosi się do zliczeń?
- 24. C++: do czego służą niezależne referencje?
- 25. C++ wektor inicjujący
- 26. C++ wektor gromadzi
- 27. Co to jest Cordova i jak odnosi się do PhoneGap?
- 28. JDBC pobiera atrybut relacja +, do którego odnosi się klucz obcy
- 29. C++ wektor ciąg
- 30. zwraca pusty wektor C++
'std :: vector' w rzeczywistości zarządza pamięcią dla ciebie (to jest cały punkt' std :: vector'). Myślę, że chodziło o to, że rzeczy takie jak 'std :: vector' nie wywołują 'delete' na każdym z elementów' int * ', ani też nie odwołują się do liczenia jego elementów. Inteligentne wskaźniki można wykorzystać do dodania obsługi liczenia odwołań, np. 'std :: vector >'. –
@Insilico: W kategoriach Obj-C "zarządzanie pamięcią" oznacza zliczanie referencji obiektów Obj-C. –