Bonjour tout le monde.
Voila je lisais ce bloc afin de comprendre ce que fait, de manière général, l’algorithme std::for_each
. En le lisant j’ai découvert l’algorithme std::for_each_n
.
J’ai compris qu’il attend 3 arguments :
- 1 itérateur de début de la collection;
- 1 certain nombre d’éléments N;
- Et enfin une fonction.
Et que cet algorithme applique la fonction aux N premiers élément de la collection.
J’ai arrêté la lecture de ce bloc après avoir lu l’exemple d’utilisation de for_each_n
. J’ai voulu l’appliquer a l’exemple du cours. Mais je tombe sur l’erreur ci-dessous, je comprends la signification de l’erreur mais pas pourquoi ça me dit que cet algorithme ne fait pas partie de l’espace nom std
. Pourtant dans l’exemple du site cppreference for_each_n est déclaré avec std
donc qu’il fait partie de cet espace nom. Je me demande si j’utilise mal cet algorithme.
Bref voici le code que j’ai essayé :
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int main ()
{
std::vector<std::string> const v {
"cas 1", "cas 2", "cas 3", "cas 4",
"cas 5", "cas 6", "cas 7", "cas 8"
};
// je souhaite afficher le 5 premiers elements
std::for_each_n (std::cbegin (v), 5,
[] (std::string const & cas) -> void
{
std::cout << "cas reçu : " << cas << std::endl;
}
);
return 0;
}
Et voici la commande de compilation :
g++ -std=c++17 test.cpp -Wall -Wextra -pedantic -o test.out
Et voici ce que me dit g++ (je comprends la signification mais pas la raison)
test.cpp: In function ‘int main()’:
test.cpp:14:10: error: ‘for_each_n’ is not a member of ‘std’
std::for_each_n (std::cbegin (v), 5,
^~~~~~~~~~
test.cpp:14:10: note: suggested alternative: ‘for_each’
std::for_each_n (std::cbegin (v), 5,
^~~~~~~~~~
for_each
J’ai même testé clang++ et ça me dit un peu près la même chose que g++. Curieusement en testant ce code a un compilateur en ligne : Wandbox. Ça compile normalement, aucun problème.
Merci en avance