int interdites[5] {1 ,2 ,3 ,4 ,5}; int position; ... int posInterdite = std::find(std::begin(interdites), std::find(interdites), pi); if (position == pi) { cout << "Position interdite" << endl; } ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include <iostream> #include <array> #include <vector> #include <set> #include <unordered_set> int main() { int position = 3; // Moche, mélange C et C++ int interdites[5] = {1 ,2 ,3 ,4 ,5}; auto found = std::find(std::begin(interdites), std::end(interdites), position); if (found != std::end(interdites)) std::cout << "Position interdite trouvée" << std::endl; else std::cout << "Position interdite NON trouvée" << std::endl; // Mieux, si tu sais que ton tableau ne changera jamais de taille std::array<int, 5> interdites2 = {1 ,2 ,3 ,4 ,5}; auto found2 = std::find(interdites2.begin(), interdites2.end(), position); if (found2 != interdites2.end()) std::cout << "Position interdite trouvée" << std::endl; else std::cout << "Position interdite NON trouvée" << std::endl; // Si ton tableau peut changer de taille std::vector<int> interdites3 = {1 ,2 ,3 ,4 ,5}; auto found3 = std::find(interdites3.begin(), interdites3.end(), position); if (found3 != interdites3.end()) std::cout << "Position interdite trouvée" << std::endl; else std::cout << "Position interdite NON trouvée" << std::endl; // Si tu veux savoir si un élément n'est pas dans une série, un set est plus adapté // (un ordre de grandeur plus rapide, de l'ordre de 0(log(n)) au lieu de 0(n) pour un tableau). std::set<int> interdites4 = {1 ,2 ,3 ,4 ,5}; if (interdites4.find(position) != interdites4.end()) std::cout << "Position interdite trouvée" << std::endl; else std::cout << "Position interdite NON trouvée" << std::endl; // La version la plus rapide, mais plus "gourmande" en mémoire // (ordre de grandeur de l'ordre de 0(1)). std::unordered_set<int> interdites5 = {1 ,2 ,3 ,4 ,5}; if (interdites5.find(position) != interdites5.end()) std::cout << "Position interdite trouvée" << std::endl; else std::cout << "Position interdite NON trouvée" << std::endl; return 0; }
Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
std::vector<int> interdites5{ 1 ,2 ,3 ,4 ,5 }; // ou tableau ou array<> trié auto found5 = std::lower_bound( begin(interdites5), end(interdites5), position ); if ( found5!=interdites5.end() && *found5==position ) std::cout << "Position interdite trouvée" << std::endl; else std::cout << "Position interdite NON trouvée" << std::endl;
A quoi correspond 0(1)?
J'ai pensé aux coordonnees mais ça a été plus simple pour moi de numéroter les cases parce que j'avais pas vraiment d'idée sur comment mettre ça en place...
std::array<std::array<char, 5>, 4> grid; // Init toutes les cases à "." for (int i = 0; i < 4; ++i) for (int j = 0; j < 5; ++j) grid[i][j] = '.'; // tout en haut à gauche grid[0][0] = '#'; // tout en bas à droite grid[3][4] = '#'; // Affichage de la grille for (int i = 0; i < 4; ++i) { for (int j = 0; j < 5; ++j) std::cout << grid[i][j]; std::cout << std::endl; } std::cout << std::endl;
std::array<char, 5*4> grid; // Init toutes les cases à "." for (int i = 0; i < 5*4; ++i) grid[i] = '.'; // tout en haut à gauche grid[0 * 4 + 0] = '#'; // tout en bas à droite grid[3 * 4 + 4] = '#'; // Affichage de la grille for (int i = 0; i < 4; ++i) { for (int j = 0; j < 5; ++j) std::cout << grid[i * 4 + j]; std::cout << std::endl; } std::cout << std::endl;