Czy istnieje standardowy sposobem na dostęp do podstawowych pojemnik stack
, queue
, priority_queue
?Czy istnieje sposób dostępu do podstawowego kontenera adapterów kontenerowych STL?
Znalazłem metody nazywanej: _Get_container()
w VS2008
realizacji stack
i queue
, ale nikt do priority_queue
! Myślę, że i tak nie jest to standard.
Ponadto wiem, że to głupie pytanie! gdzie mogę znaleźć oficjalną dokumentację standardowej biblioteki?
Tylko dla wyjaśnienia, nie próbowałem zepsuć podstawowego pojemnika. Wszystko, co starałem się zrobić to w ten sposób:
template <class Container>
std::ostream& printOneValueContainer(std::ostream& outputstream, Container& container)
{
Container::const_iterator beg = container.begin();
outputstream << "[";
while(beg != container.end())
{
outputstream << " " << *beg++;
}
outputstream << " ]";
return outputstream;
}
// stack, queue
template
< class Type
, template<class Type, class Container = std::deque<Type> > class Adapter
>
std::ostream& operator<<(std::ostream& outputstream, const Adapter<Type>& adapter)
{
return printOneValueContainer(outputstream, adapter._Get_container());
}
.
.
.
std::stack<int> iStack;
.
.
std::cout << iStack << std::endl;
Mam nadzieję, że widać, że _Get_container()
nie jest standardem, a nie ma nikogo na priority_queue
w VS2008
realizacji.
nie dokładnie to, czego potrzebujesz, ale kolejka/stack/priority_queue mają ** chroniony ** element "c", który jest podstawowym kontenerem, więc jeśli dziedziczysz z dowolnego z nich, możesz uzyskać do niego dostęp bezpośrednio . –
@Evan Ciekawe! Czy to oznacza, że adaptery są przeznaczone do rozszerzenia poprzez dziedziczenie? Jeśli tak, dlaczego nie ma wirtualnego dtor? –
Ponadto, chronione dane to nie nie w mojej książce - jestem trochę rozczarowany tym! –