Using standard algorithms with C arrays | Utilisation des algorithmes de la STL avec des arrays de type C |
Didn't
you ever think that it could
be interesting if you could use the standard algorithms with C arrays?
Well, it can be done! Standards algorithms are designed to be used with
standard containers and use iterators but containers are no more than
some sort of "intelligent" arrays and iterators are no more than some
kind of pointers. For example, the sort algorithm is declared as: |
Ne vous
êtes-vous jamais demandé s'il
était possible d'utiliser les algorithmes de la STL avec des
arrays de type C? Et bien, c'est tout-à-fait possible! Les
algorithmes ont été créés pour être
utilisés avec les containers de la STL et utilisent des
itérateurs mais, un container n'est jamais qu'une sorte d'array
évolué et les itérateurs ne sont que des sortes de
pointeurs. Par example, l'algorithme sort est déclaré comme ceci: |
void sort (RandomAccessIterator first,RandomAccessIterator last); |
So, you may be tempted to use it like this: | Vous pourriez être tenté de l'utiliser comme ceci: |
int array[10]; |
The issue here is that &array[10] yields to undefined behavior since array[10] is out of bounds. But, using pointer arithmetic is valid. You can have a pointer that points to one past the end of the array. So use it this way: | Le problème ici est que &array[10] est indéfini parce que array[10] est hors des limites de l'array. Par contre, rien ne vous empêche d'utiliser un pointeur pointant vers un élément au delà de l'array. Donc, il faut l'utiliser de cette façon: |
int array[10]; |
Here is a working sample which uses a simple array of integers and shows how to use some of the algoritms. Take a look at your favourite help resource to get a list of all of them. | Voici un example complet montrant comment utiliser les algorithmes. Il est basé sur un simple array d'entiers et je vous invite à regarder dans votre fichier d'aide préféré pour avoir une liste complète de tous les algorithmes utilisables. |
#include <iostream> |
The
example above uses a simple
array of integers. But what about arrays of user defined type? The algorithms use the operators <, ==, ... to compare two items of the array, to evaluate them... so, all you need is to define the needed operators for your own types. Below, I create a struct containing 2 char arrays and I define an operator < to be used with the std::sort algorithm. |
Dans
l'example ci-dessus, je n'utilise qu'un array
d'entiers. Comment faire si je veux que mon array contienne un type que
j'ai défini moi-même? Ce n'est pas vraiment compliqué. Il faut savoir que les algorithmes utilisent les opérateurs <, ==, ... lorsqu'ils comparent deux éléments de l'array. Il suffit donc de définir l'opérateur adéquat pour le type que l'on veut utiliser. L'example ci-dessous crée une structure contenant deux char arrays et définit l'opérateur < utilisé par l'algorithme std::sort. |
#include <iostream.h> |