Perché le API della libreria Python sono più intuitive rispetto alle API della libreria STL di C ++? [chiuso]

1

Non sono sicuro che sia una prospettiva personale o solo un sentimento comune. Penso che nella maggior parte dei casi, l'API di python sia molto più intuitiva delle API di libreria C ++ STL.

Se non si tratta di un giudizio soggettivo, qualcuno potrebbe spiegare perché?

    
posta xiao 17.09.2011 - 10:22
fonte

4 risposte

7

Trovo che la STL sia piuttosto intuitiva. È estremamente coerente e la formulazione è chiara. Ovviamente la coerenza non implica facilità di scoperta, tuttavia una volta scoperto un determinato contenitore o algoritmo, dovresti essere a tuo agio con gli altri.

Alcuni esempi:

  • size , empty , clear sono presenti su tutti i contenitori, con la stessa firma. Hanno la stessa complessità (con un'eccezione per std::list::size ).
  • push_back è disponibile su tutti i contenitori che supportano l'inserimento alla fine: vector , deque , list , ... indipendentemente dalla loro implementazione interna. La firma e la complessità sono quasi identiche (da una riduzione di O(1) a una vera% diO(1)) quindi non c'è da sorprendersi.
  • copy prende un intervallo di iteratori come input e un singolo iteratore come output. Lo stesso vale per altri algoritmi: un intervallo di iteratori come input (+ un altro singolo iteratore per un secondo input) e un singolo iteratore come output.

Personalmente trovo facile usare un "nuovo" contenitore ( unordered_map ?) perché sono in mani esperte.

    
risposta data 17.09.2011 - 12:40
fonte
1

È assolutamente soggettivo.

La libreria STL di C ++ sarà molto più intuitiva per chi è molto a suo agio con C ++.

Le librerie Python saranno molto più intuitive per gli esperti di Python.

Più tempo trascorri con una lingua, più ti senti a tuo agio e più ha senso. Oppure, più provi a forzare che abbia senso astenersi dal perdere la tua mente (a seconda della lingua in questione - pensa ad esempio a Javascript e la catena di portata, o semplicemente Brainf ** k tutto sulla sua proprio;))

    
risposta data 17.09.2011 - 10:28
fonte
1

L'intuitività è piuttosto soggettiva, ma ci sono alcuni punti che posso essere oggettivamente fatti.

1) Le API di Python contengono più materiale in loro

I vari oggetti di Python hanno molte più funzionalità. Confronta ciò che puoi fare con una stringa python e una stringa C ++. O la funzionalità casuale di Python rispetto alle funzionalità casuali di c ++. Un esempio concreto, selezionando un elemento casuale da una lista / vettore.

items[rand() % items.size()]

vs

random.choice(items)

Python si è spostato molto di più nella libreria standard che lo rende più facile da usare.

2) Invocare la funzionalità di Python richiede in genere meno verbosità.

Ad esempio, confrontare gli elenchi di ordinamento e i vettori.

std::sort(items.begin(), items.end())

vs

items.sort()

Che cosa succede se si desidera ordinare in base a criteri personalizzati?

bool name_compare(std::string & left, std::string & right)
{
    return left.size() < right.size();
}
std::sort(items.begin(), items.end(), name_compare)

vs

items.sort(key = len)

3) I valori letterali producono valori di libreria standard

In letterali stringa C ++ produce array di caratteri e letterali di array produce matrici. Né produce l'oggetto C ++ che sarebbe utile. Al contrario, Python fornisce letterali per produrre il tipo più utile di strutture dati.

    
risposta data 17.09.2011 - 14:44
fonte
0

Non ho notato alcuna differenza nell'intuitività, ma le interfacce C ++ sono naturalmente più complicate dal momento che devono specificare se passare oggetti tramite pointer, reference, value o move semantics e chi è responsabile dell'eliminazione di qualsiasi oggetto coinvolto. Inoltre, gli sviluppatori C ++ sono molto interessati all'efficienza a basso livello, che può portarli a fornire diversi modi per accedere alla stessa funzionalità.

    
risposta data 17.09.2011 - 14:14
fonte

Leggi altre domande sui tag