Bonjour a tous, j'ai surement une poutre dans l'oeil ce matin, je ne trouve pas le bug :-/
J'essaye d'implémenter une pile rapide (pour remplacer std::stack<T, std::vector<T> > ) ; la taille est fixe, et voila mon code :
Code :
- template <class T, unsigned int SIZE>
- class FastStack
- {
- public:
- FastStack() { index=data; }
- FastStack(const FastStack& s) { *this=s; }
- FastStack& operator=(const FastStack& s)
- {
- //TODO inutile de copier tout jusqu'a SIZE
- for(unsigned int i=0;i<SIZE;i++)
- data[i]=s.data[i];
- index=data+(s.index-s.data);
- return *this;
- }
- inline T& top() const { return *index; }
- inline void push(const T& element)
- {
- BOOST_ASSERT((index-data)<(SIZE+1));
- *index=element;
- index++;
- }
- inline void pop()
- {
- index--;
- BOOST_ASSERT(index>=data);
- }
- inline bool empty() const { return(index==data); }
- private:
- T data[SIZE],*index;
- };
|
Vous vous en doutez, je ne posterai pas ici si ca fonctionnait :-) J'utilise ca dans un programme complexe, et des que je remplace std::tack par mon machin, je suis au pays des mauvais resultats...donc, avant de renter plus profondément dans le débuggage, je me demande si j'ai raté quelque chose de vraiment évident ?
Merci d'avance