4.1 Le fichier PList.h

L'include de base :

1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"


#include "PList_impl.h"

#endif

Les constructeurs et le destructeur :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
};

#include "PList_impl.h"

#endif

Définition des opérateurs += :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
};

#include "PList_impl.h"

#endif

Vous pouvez redéfinir les opérateurs -= si vous avez envie.

Normaliser la liste :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
};

#include "PList_impl.h"

#endif

Récupérer le premier ou le dernier élément de la liste :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
};

#include "PList_impl.h"

#endif

On renvoie des copies pour être sûre que la PList soit constante.

Récupérer un élément suivant sa position dans la liste :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
};

#include "PList_impl.h"

#endif

Changer la valeur d'un élément :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
};

#include "PList_impl.h"

#endif

L'opérateur [] :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
};

#include "PList_impl.h"

#endif

Les fonctions qui renvoient les PIterator pour aller à l'endroit ou à l'envers :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
};

#include "PList_impl.h"

#endif

Les fonctions qui ajoutent un élément au début ou à la fin de la liste :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
};

#include "PList_impl.h"

#endif

Les fonctions qui dégomment le premier élément ou le dernier élément :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
};

#include "PList_impl.h"

#endif

La fonction qui efface toute la liste :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
};

#include "PList_impl.h"

#endif

Les fonctions qui effacent un élément :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
		
		bool erase(PIterator<T> & it);
		bool erase(int index);
};

#include "PList_impl.h"

#endif

La fonction qui renvoie la taille de la liste :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
		
		bool erase(PIterator<T> & it);
		bool erase(int index);
		
		size_t size() const;
};

#include "PList_impl.h"

#endif

Les fonctions de conversion en std::list et en std::vector :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
		
		bool erase(PIterator<T> & it);
		bool erase(int index);
		
		size_t size() const;
		
		std::list<T> toStdList() const;
		std::vector<T> toStdVector() const;
};

#include "PList_impl.h"

#endif

Les opérateurs amis de la classe PList :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
		
		bool erase(PIterator<T> & it);
		bool erase(int index);
		
		size_t size() const;
		
		std::list<T> toStdList() const;
		std::vector<T> toStdVector() const;
		
		friend PList & operator << (PList<T> & liste, const T & el){
			liste.pushBack(el);
			return liste;
		}
		
		friend PList & operator << (PList<T> & liste, const PList<T> & list){
			liste.pushBack(list);
			return liste;
		}
		
		friend std::ostream & operator << (std::ostream & out, const PList<T> & list){
			if(list.p_size == 0) return out;
			for(PIterator<T> it(list.begin()); it != list.end(); ++it){
				out << *it << ", ";
			}
			return out;
		}
};

#include "PList_impl.h"

#endif

La fonction d'initialisation et la fonction de copie :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
		
		bool erase(PIterator<T> & it);
		bool erase(int index);
		
		size_t size() const;
		
		std::list<T> toStdList() const;
		std::vector<T> toStdVector() const;
		
		friend PList & operator << (PList<T> & liste, const T & el){
			liste.pushBack(el);
			return liste;
		}
		
		friend PList & operator << (PList<T> & liste, const PList<T> & list){
			liste.pushBack(list);
			return liste;
		}
		
		friend std::ostream & operator << (std::ostream & out, const PList<T> & list){
			if(list.p_size == 0) return out;
			for(PIterator<T> it(list.begin()); it != list.end(); ++it){
				out << *it << ", ";
			}
			return out;
		}
		
	private:
		void intialisationPList();
		void copyPList(const PList<T> & liste);
		
};

#include "PList_impl.h"

#endif

Et enfin les attributs de la classe PList :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#ifndef __PLIST__H__
#define __PLIST__H__

#include <list>
#include <vector>

#include "PElement.h"
#include "PIterator.h"

template <class T>
class PList{
	public:
		PList();
		PList(const T & el);
		PList(const PList<T> & liste);
		virtual ~PList();
		
		PList & operator = (const PList<T> & liste);
		PList & operator += (const T & el);
		PList & operator += (const PList<T> & liste);
		
		void normalise(const T & scal);
		
		T front() const;
		T back() const;
		T getAt(size_t index) const;
		void setAt(const T & value, size_t index);
		T operator [] (size_t index) const;
		T & operator [] (size_t index);
		
		PIterator<T> begin() const;
		PIterator<T> end() const;
		PIterator<T> rbegin() const;
		PIterator<T> rend() const;
		
		
		bool pushBack(const T & el);
		bool pushBack(const PList<T> & liste);
		bool pushFront(const T & el);
		bool pushFront(const PList<T> & liste);
		
		bool popBack();
		bool popFront();
		void clear();
		
		bool erase(PIterator<T> & it);
		bool erase(int index);
		
		size_t size() const;
		
		std::list<T> toStdList() const;
		std::vector<T> toStdVector() const;
		
		friend PList & operator << (PList<T> & liste, const T & el){
			liste.pushBack(el);
			return liste;
		}
		
		friend PList & operator << (PList<T> & liste, const PList<T> & list){
			liste.pushBack(list);
			return liste;
		}
		
		friend std::ostream & operator << (std::ostream & out, const PList<T> & list){
			if(list.p_size == 0) return out;
			for(PIterator<T> it(list.begin()); it != list.end(); ++it){
				out << *it << ", ";
			}
			return out;
		}
		
	private:
		void intialisationPList();
		void copyPList(const PList<T> & liste);
		///PElement qui permet d'accéder au autres
		PElement<T> p_handle;
		///nombre d’éléments de la PList
		size_t p_size;
		
};

#include "PList_impl.h"

#endif

Voilà pour le fichier PList.h.