Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
deque.H
1 # include <Vector.H>
2 
3 template <class Key>
4 class deque : public vector<Key>
5 {
6 private:
7  DynArray<Key> array;
8 
9  typedef Key value_type;
10  typedef deque::value_type& reference;
11  typedef const deque::value_type& const_reference;
12  typedef unsigned int size_type;
13 
14  size_type num_elem;
15 
16 public:
17  friend class iterator : public vector<Key>::iterator
18  {
19  private:
20 
21  friend class deque<Key>;
22 
23  static const int Invalid_Position = -1;
24 
25  DynArray<Key> * dyn_array_ptr;
26 
27  size_type current_position;
28 
29  iterator(deque<Key> & vec, int pos = 0)
30  : dyn_array_ptr(&vec.array), current_position(pos)
31  {
32  /* empty */
33  }
34 
35  void set_pos(int pos)
36  {
37  current_position = num_elem;
38  }
39 
40  int get_position() const { return current_position; }
41 
42  void verify_array(DynArray<Key> * array_ptr) const
43  {
44  if (array_ptr not_eq dyn_array_ptr)
45  throw std::domain_error("Iterator is not set to same array");
46  }
47 
48  DynArray<Key> * get_dyn_array_ptr() { return dyn_array_ptr; }
49 
50  public:
51 
52  iterator()
53  : dyn_array_ptr(NULL), current_position(Invalid_Position)
54  {
55  /* empty */
56  }
57 
58  iterator(const iterator& itor)
59  : dyn_array_ptr(itor.dyn_array_ptr),
60  current_position(itor.current_position)
61  {
62  /* empty */
63  }
64 
65  } ;
66 
67  deque() : array(0), num_elem(0) { /* empty */}
68 
69  deque (const deque& c) : array(c.array), num_elem(c.num_elem)
70  {
71  // empty
72  }
73 
74  deque (size_type num) : array(num), num_elem(num)
75  {
76  array.reserve(0, num_elem);
77  }
78 
79  deque (size_type num, const Key& value) : array(num), num_elem(num)
80  {
81  array.reserve(0, num_elem);
82 
83  for(size_type i = 0; i < num; i++)
84  array.access(i) = value;
85  }
86 
87  deque (iterator beg, iterator end) : array(0), num_elem(end - beg)
88  {
89  array.reserve(0, num_elem);
90 
91  for (int i = 0; beg < end; i++, beg++, num_elem++)
92  array.access(i) = *beg;
93  }
94 
95  ~deque() { /* empty */ }
96 
97  void push_front(const Key& value)
98  {
99  insert(begin(), value);
100  }
101 
102  void pop_front()
103  {
104  erase(begin());
105  }
106 
107 };
iterator insert(const iterator &pos, const Key &value)
Inserta value en la posición dada por el iterador pos.
Definition: Vector.H:501
void reserve(const size_t l, const size_t r)
Definition: tpl_dynArray.H:960
iterator erase(const iterator &pos)
Borra el elemento de la posición pos.
Definition: Vector.H:563
Definition: deque.H:4
iterator begin() const
Definition: Vector.H:471
Definition: Vector.H:16
T & access(const size_t i)
Definition: tpl_dynArray.H:793
iterator end() const
Definition: Vector.H:478

Leandro Rabindranath León