Il C++ va bene per algoritmi e strutture dati?
È la scelta più comune nella programmazione competitiva e una scelta solida per i colloqui: veloce, con una libreria standard che copre quasi ogni struttura che ti serve. Il prezzo è più codice e più modi di sbagliare, dai puntatori pendenti agli iteratori invalidati. Costruire prima le strutture da te, come fa questo percorso, è il modo per non farti più sorprendere.
Quali container della STL corrispondono a quali strutture dati?
std::vector è un array dinamico, std::stack e std::queue sono adattatori che per impostazione predefinita poggiano su std::deque, std::list è una lista doppiamente concatenata, std::unordered_map e std::unordered_set sono tabelle hash, std::priority_queue è un heap binario (un max-heap per impostazione predefinita, a differenza di quelli di Python e Java), e std::map e std::set sono alberi binari di ricerca bilanciati, in pratica alberi rosso-neri. Non esiste un container per trie o grafi; quelli li scrivi tu.
Devo implementare le strutture dati da solo o usare direttamente la STL?
Entrambe le cose, in quest'ordine. Implementa ogni struttura una volta, così sai perché le ricerche in std::unordered_map richiedono in media tempo costante e perché std::map mantiene le chiavi ordinate, poi usa la STL ovunque. In una gara o in un colloquio nessuno si aspetta un albero rosso-nero scritto a mano; si aspettano che tu scelga il container giusto e ne conosca il costo.
C++ o Python per algoritmi e strutture dati?
C++ se vuoi fare programmazione competitiva o sostenere colloqui dove è richiesto; Python se vuoi la strada più breve dall'idea al codice funzionante. Gli algoritmi sono identici, per questo molti imparano con uno e gareggiano con l'altro. Ogni corso sulle strutture dati di questo percorso è insegnato in entrambi.
Quali corsi di questo percorso non sono insegnati in C++?
Due: la programmazione dinamica e la serie di colloqui in Python, entrambi insegnati in Python. Sono elencati dopo i passaggi, con un link che li apre in Python. Le idee si trasferiscono senza modifiche: in C++ una tabella di memoizzazione è un std::vector o una std::unordered_map.
Devo conoscere il C++ prima di iniziare questo percorso?
Almeno classi, puntatori, riferimenti e std::vector. Se sono argomenti nuovi, il corso di C++ di Coddy li copre prima, gratis, e questo percorso riprende da dove finisce.