¿Existe una norma manera para acceder al contenedor subyacente de stack
, queue
, priority_queue
?¿Hay alguna manera de acceder al contenedor subyacente de los adaptadores de contenedor STL?
He encontrado un método llamado: _Get_container()
en VS2008
implementación de stack
y queue
, pero nadie para priority_queue
! Creo que no es estándar de todos modos.
Además, sé que es una pregunta tonta! ¿Dónde puedo encontrar la documentación oficial de la biblioteca estándar?
Solo por aclaración, no estaba tratando de meter la pata con el contenedor subyacente. Todo lo que yo estaba tratando de hacer es lo siguiente:
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;
espero que vea que _Get_container()
no es estándar, y no hay nadie para priority_queue
en VS2008
aplicación.
no es exactamente lo que necesita, pero queue/stack/priority_queue tiene un ** protected ** member 'c' que es el contenedor subyacente, por lo que si hereda de alguno de estos, puede acceder directamente . –
@Evan Interesante! ¿Esto significa que los adaptadores están destinados a la extensión a través de la herencia? Si es así, ¿por qué no hay dtor virtual? –
Además, los datos protegidos son un no-no en mi libro. ¡Estoy un poco decepcionado con esto! –