PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stack (aus STL)



f0rtex
07-06-2003, 11:10
Hallo Leute

Es sei folgende Stackimplementierung gegeben:


template <class T, class C=deque<T> > class std::stack {
protected:
C c;
public:
typedef typename C::value_type value_type;
typedef typename C::size_type size_type;
typedef C container_type;

explicit stack (const C& a=C()) : c(a) {}

bool empty() const {return c.empty(); }
size_type size() const {return c.size();}

value_type& top() {return c.back();}
const value_type& top() const{return c.back();}

void push(const value_type& x) {c.push_back(x); }
void pop() {c.pop_back();}
};


Meine Frage ist folgende:
Woran erkennt der Compiler welche der beiden top() Funktionen er benutzen soll? Kann mir jemand ein Bsp. für den ersten und zweiten Fall nennen?

MfG
f0rtex

anda_skoa
07-06-2003, 13:06
Ich denke der Compiler nimm immer die ersten, außer die Stackinstanz ist const.

Also bei


void foo(const std::stack<int>& s)
{
int i = s.top();
}

kann er ja nur Methoden aufrufen, die als const deklariert sind, weil s eine const& ist

Ciao,
_

f0rtex
07-06-2003, 13:28
Klaro, wenn man das Kopieren verhindern möchet.

Danke, dass du meinen Knoten gelöst hast :D

Schönes Wochenende
f0rtex