wektor znaku jest ładny, ponieważ pamięć jest ciągła. Dlatego możesz go używać z wieloma API C, takimi jak gniazda berkley lub API plików. Możesz wykonać następujące czynności, na przykład:
std::vector<char> vect;
...
send(sock, &vect[0], vect.size());
i będzie działać poprawnie.
Można zasadniczo traktować go tak, jak każdy inny dynamicznie przydzielany bufor znaków. Możesz skanować w górę iw dół, szukając magicznych liczb lub wzorów. Możesz je częściowo przeanalizować. W celu odbierania z gniazda można bardzo łatwo zmienić jego rozmiar, aby dołączyć więcej danych.
Wadą jest zmiana rozmiaru nie jest strasznie wydajna (zmiana rozmiaru lub prealocate roztropnie) i usunięcie z przodu tablicy będzie również bardzo nieefektywne. Jeśli potrzebujesz, powiedzmy, popuwać tylko jeden lub dwa znaki w czasie z przodu struktury danych bardzo często, kopiowanie do deque przed tym przetwarzaniem może być opcją. Kosztuje to kopię, a pamięć deque nie jest ciągła, więc nie można po prostu przekazać wskaźnika do C API.
Podsumowując, poznaj struktury danych i ich kompromisy przed rozpoczęciem nurkowania, jednak wektor znaków jest zazwyczaj tym, co widzę w ogólnej praktyce.
dobra odpowiedź. dla części uczącej się: znalazłem ładne zdjęcie pokazujące wykorzystanie kontenerów jakiś czas temu i umieściłem go w tej odpowiedzi: http://stackoverflow.com/questions/366432/extending-stdlist#366710 –