Mam strukturę danych vector<set<char> >
(baza danych transakcji) i chcę znać jej wielkość. Kiedy używam sizeof() z każdym set<char>
, rozmiar wynosi 24, mimo że zestaw zawiera 3, 4 lub 5 znaków. Później, kiedy używam sizeof() z vector<set<char> >
, rozmiar wynosi 12 ... Przypuszczam, że nie jest to sposób poznania rozmiaru struktury danych. Jakaś pomoc? Dzięki.sizeof() a wektor
Odpowiedz
Chcesz vector::size()
i set::size()
.
Zakładając v
to wektor, to zrobić:
size_t size = 0;
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
size += cit->size();
}
sizeof()
daje Ci rozmiar w pamięci obiektu/typ jest stosowany do, wielokrotność sizeof(char)
(zwykle jeden bajt). Jeśli chcesz wiedzieć, rozmiar w pamięci zbiornika i jego elementów, można to zrobić:
sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type
Co, jeśli już zarezerwował swój wektor? –
@John: A co, jeśli on * ma *? 'reserve()' ma * nic * do zrobienia z 'size()'. –
Myślę, że John oznacza, że jeśli chcesz wiedzieć, ile pamięci zajmuje wektor (i zawartość), powinieneś patrzeć na pojemność, a nie na rozmiar. "Wielkość pamięci kontenera i jego elementów" jest oczywiście niejednoznaczna, ale podejrzewam, że jest bardziej prawdopodobne, że jest ona rozumiana jako odnosząca się do ilości pamięci przydzielonej przez wektor, a nie do ilości pamięci zajmowanej obecnie przez elementy. –
sizeof()
jest obliczana w czasie kompilacji, więc nie ma sposobu, może powiedzieć, jak wiele elementów ma wnętrze.
Użyj metody size()
obiektu wektorowego.
sizeof
zwraca rozmiar samego obiektu. jeśli zawiera wskaźnik do tablicy, na przykład nie będzie liczony w rozmiarze tablicy, zlicza tylko rozmiar wskaźnika (4 na 32 bitach) do użytku wektorowego .size
Użyj funkcji składowej, aby znaleźć liczbę elementów w wektorze . Wskazówka - są one przydzielane w wolnym sklepie.
Wektor jest zaimplementowany przy użyciu wewnętrznych wskaźników do rzeczywistego miejsca przechowywania. Dlatego sizeof() zawsze zwraca ten sam wynik, który nie obejmuje samego przechowywania danych. Zamiast tego spróbuj użyć metody vector::size()
. Spowoduje to zwrócenie liczby elementów w wektorze.
vector
w STL jest szablon klasy, kiedy dasz parametr szablonu wewnątrz <SomeType>
po wektorze, C++ kompilator wygenerowany kod dla klasy typu SomeType. Więc kiedy zapełnisz wektor przy użyciu push_back
, wstawiasz kolejny obiekt o numerze SomeType
, więc gdy zażądasz .size()
z kompilatora, podasz liczbę obiektów SomeType
wstawionych przez ciebie.
Mam nadzieję, że pomaga!
Cóż, to jest odpowiedź w pobliżu stodoły ... Kto powiedział, że używa 'push_back' i jak to jest istotne? W jaki sposób fakt, że wektor jest szablonem, ma znaczenie? Ale przynajmniej masz rację, że 'size()' jest tym, czego szuka OP. –
@STingRaySC Próbowałem wyjaśnić OP, że sizeof nie ma nic wspólnego z tym, czego chciał. Jest to metoda .size(), której powinien/powinna/poszukiwać. –
sizeof() jest operatorem kompilacji –