C / C++

Bonjour,
comme je n'y connais quasi rien en C/C++ (j'arrive un peu à en lire), j'ai quelques questions.
Le cadre, c'est l'algorithmique, telle que pratiquée ici, ou dans d'autres "compèt".

Il me semble que C++ est plus utilisé ( en tout cas sur Euler ).
Est-ce le cas ici, ou dans les autres compèt ? Ou est-ce équilibré ?
Quelles sont des raisons objectives ?
Y a-t-il des différences importantes dans l'écriture des algos, où c'est juste l'entête, et quelques trucs ?
Les librairies (genre Boost) sont-elles utilisées ?

--
Je n'ai pas pour objectif de me lancer dans la compèt, mais d'apprendre de bonnes bases.
Je me suis fait très plaisir en Python, mais on peut (ou je sais) pas faire de tableaux de booléens...

--

Merci pour toute réponse.

C/C++ n'est pas un langage.
C++ est plus utilisé, en théorie. En pratique, les gens font du C & stdlibc++. C'est à dire ils utilisent le sous ensemble commun à C et C++ plus la librairie standard C++. Le résultat est souvent "valide" en C++ (conforme au standard C++), mais est considéré comme un C++ "pauvre" par les programmeurs C++.
C++ est un langage complexe mais puissant, le principe du C & stdlibc++ est de garder le plus de puissance sans rentrer dans le complexe.
Par exemple, si tu veux un arbre, en C, il faut le coder avant de l'utiliser, c'est à dire les fonction insérer, supprimer, etc... Avec la stdlibc++ (la librairie standard C++), tu peux utiliser std::map, qui possède déjà les fonctions membres insert, erase, etc... il te suffit juste d’écrire #include <map> .
Depuis l'an dernier Boost est disponible à Prologin, il est possible en théorie de faire du C & stdlibc++ & Boost, mais Boost est une bibliothèque écrite pour le programmeur C++ et il est très difficile de la mélanger avec un style C (c'est à dire avec seulement le sous ensemble commun à C et C++).
Il te faudra beaucoup plus de temps pour maîtriser C++ que C & stdlibc++, mais dans les deux cas tu seras compté comme programmant en C++ (parce que ton code sera compilé par un compilateur C++ pour pouvoir utiliser la stdlibc++). Personnellement, j'ai envie de dire, si tu as le temps, lance toi en C++.

-Est ce le cas ici, ou dans les autres compet? : Le C++ est très utilisé sur ce site si je ne me trompe pas, mais pour les autres compétitions, c'est souvent le Java qui est le plus courant, suivi du C++.
-Quelles sont des raisons objectives? : Ouais
-Y a-t-il des différences importantes dans l'écriture des algos, où c'est juste l'entête, et quelques trucs? :
Bien sûr. On peut tout à fait convertir un code Python en code C++ sans changer grand chose, mais le mieux reste quand même d'exploiter les avantages du langage dans lequel on code.
-Les librairies (genre Boost) sont-elles utilisées? : Certaines, mais pas Boost (enfin, pour Prologin si, apparemment).
-Je n'ai pas pour objectif de me lancer dans la compèt, mais d'apprendre de bonnes bases. : Peut être.
-Je me suis fait très plaisir en Python, mais on peut (ou je sais) pas faire de tableaux de booléens... : Et oui, mais que veux-tu? La vie est dure et ne pardonne que rarement.
-Merci pour toute réponse. : Non

Les orgas ont des stats pour l'utilisation des langages en finale. Il me semble que Python est très utilisé aussi.

Comme dit précédemment, le gros avantage du C++ en algo c'est toutes les structures définies dans la stdlibc++. Contrairement à la plupart des langages interprétés, tu peux choisir exactement comment tes données sont conservées en mémoire, mais contrairement au C tu n'as pas à coder les structures.

Perso je ne suis donc pas un de ces mauvais élèves qui font du C en C++. :) D'ailleurs, j'ai essayé d'apprendre le C++ sans passer par le C afin de ne pas être contaminé, bien que je m'y connaisse en C tout de même.
Notamment en finale j'utilise très souvent la POO. C'est très élégant pour faire des listes d'actions (qui ont besoin de plusieurs fonctions/méthodes).

Sinon : « Les librairies (genre Boost) sont-elles utilisées ? »
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRRG
Library signifie bibliothèque, pas librairie :( Dans une librairie tu achètes des livres pour les ramener chez toi, dans une bibliothèque tu as accés directement à tous les ouvrages (fonctions) de ton choix.

(je réponds sans être désigné)

Pour les livres :

  • The C++ programming language
    Très bien si tu as déjà les bases en programmation (à travers python par exemple).
    Il est parfois un peu dur a suivre quand on débute mais couvre une grande partie du langage. Il a été écrit par Stroustrup (le créateur du langage C++), c'est un peu l’équivalent du K&R pour C++ (en moins compréhensible que le K&R peut être).
  • Accelerated C++: Practical Programming by Example
    Je ne sais pas s'il existe une traduction française.
    C'est un livre pour débutant, plus simple à suivre que tc++pl et moins théorique. C'est une très bonne introduction au C++.
  • Thinking in C++: Introduction to Standard C++, Volume One
    Point positif, il est disponible gratuitement, notamment en français ici . Il y a également une suite qui en fait un ouvrage très complet Thinking in C++, Volume 2: Practical Programming (également disponible gratuitement mais pas en français).
    Il est moins dans l'esprit C++ que les deux premiers livres. Mais pour un apprentissage sur le net, il est bien meilleurs que la plus part des "tutos". Si tu peux acheter l'un des deux premiers, c'est surement mieux.

C'est la liste souvent conseillée sur ##C++@freenode et comp.lang.c++.moderated.

Pour Boost :
C'est une bonne bibliothèque, souvent considérée comme "la bibliothèque par défaut", avec l’arrivée de C++11 elle perd un peu de son utilité sur certains points, mais reste quand même très utile notamment pour écrire du code portable (asio, fs). D'un point de vu algorithmique, elle propose nombre de structure de donnée non présentes dans la stdlibc++. Si tu commences à peine C++, tu as beaucoup de temps avant de t'en faire pour Boost, mais devant certaines fonctionnalités, la première réaction est : "WTF?! c'est possible de faire ça en C++ ?". Les seules parties de Boost qui pourraient t’intéresser pendent ton apprentissage du C++ son souvent dans le TR1 ou dans C++11 (je pense notamment à array et aux smart pointer).

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.