[STL][algorithm]for_each vs transform
Bonjour tout le monde,
Je veux faire une fonction qui prend une string et qui la met en majuscule (nous ignorerons ici les problèmes d'indianness, d'accents et de ponctuation).
J'ai trouvé 2 façons pour le faire. La première utilise la fonction for_each:
Code:
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
| #include <string>
#include <algorithm>
//...
using namespace std;
class MyUpper1
{
public:
MyUpper1(string& str):str_(str){}
void operator () (char c) const
{
str_ += toupper(c);
}
private:
string& str_;
};
int main()
{
string str = "test";
string result1;
for_each( str.begin(), str.end(), MyUpper1(result1) );
//...
} |
La deuxième solution utilise la fonction transform:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <string>
#include <algorithm>
//...
using namespace std;
class MyUpper2
{
public:
char operator () (char c)
{
return toupper(c);
}
};
int main()
{
string str = "test";
string result2 = str;
transform( str.begin(), str.end(), result2.begin(), MyUpper2() );
//...
} |
Je pense que les 2 méthodes sont assez proches, car elles utilisent toute les deux une boucle du type
Code:
for (; _ChkFirst != _ChkLast; ++_ChkFirst)
mais si les deux façons de faire existent, c'est qu'il doit y a voir des différences. Non?