Rozumiem, że standard pozwala, aby std::vector<int, A>
miał ten sam typ iteratorów dla różnych alokatorów A
. Nazywa się to SCARY iterators.Czy super-SCARY iteratory są legalne?
Teraz pytanie brzmi, czy standard pozwala std::vector<int, A>::iterator
być po prostu typedef z A::pointer
, czyniąc go po prostu int*
dla domyślnego przydziału?
Czy jest jakiś wymóg (domyślny), aby był oddzielnym typem klasy dla kontenera? Jeśli nie ma takiego wymogu, to dlaczego wszystkie główne wdrożenia (w tym SCARY) nie korzystają z tego podejścia? Prawdopodobnie zredukuje to pracę kompilatora, ale teraz kod, który zostanie przeciążony na int*
i vector<>::iterator
, nie zostanie skompilowany.
Być może niektóre nie wiedzą o [SCARY iterators] (http: // stackoverflow.com/questions/14391705/what-are-scary-iterators) i głosują, zakładając, że tak naprawdę nie istnieją? To jedyna rzecz, o której mogę pomyśleć ... – jaggedSpire
Co sprawia, że jest "super" STRASZONY? – zneak
@zneak: "typowe" iteratory SCARY oznaczają, że nadal są tradycyjną klasą, która jest po prostu zdefiniowana poza klasą szablonową. Przez "super" mam na myśli to, że jest to jeden poziom SCARYer niż te :) Zasadniczo oznacza to, że 'std :: vector',' std :: array' oraz 'std :: initializer_list' mogą współdzielić ten sam typ iteratora ... – ybungalobill