Les
algorithmes de la librairie standard
Nous présentons ici quelques algorithmes disponibles dans la
librairie standard.
copy:
#include <algorithm>
#include <string>
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
vector<string> v;
v.push_back("a");
v.push_back("b");
vector<string> v2(10); // attention suffisamment de mémoire doit être allouée dans v2
copy(v.begin() , v.end() , v2.begin());
// on peut même imprimer avec un copy
copy(v2.begin(), v2.end(), ostream_iterator<string>(cout, " "));
cout << endl;
return(0);
}
for_each:
#include <algorithm>
#include <string>
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
void f(double a)
{
cout << 2*a << endl;
}
int main()
{
vector<double> v;
v.push_back(1.1);
v.push_back(2.3);
for_each(v.begin(), v.end(), f);
// malheureusement on ne peut pas modifier v avec for_each
return(0);
}
// donc on utilise transform
transform:
#include <algorithm>
#include <string>
#include <iostream>
#include <deque>
#include <iterator>
#include <cmath>
using namespace std;
double f(double a)
{
return 3*a;
}
int main()
{
deque<double> v;
v.push_back(1.);
v.push_back(-2.);
v.push_back(1.5);
sort(v.begin(),v.end()); // on trie par ordre croissant
reverse(v.begin(),v.end()); // on renverse le conteneur
transform(v.begin(), v.end(), v.begin(), f); // on multiplie tout par 3
copy(v.begin(), v.end(), ostream_iterator<double>(cout, "\n"));
// et on écrit le tout
return(0);
}