In C++98
e C++03
std::string
potrebbe avere memorizzato i dati sottostanti in una memoria non contigua. Qual è stata la ragione di questo? Quale possibile ottimizzazione potrebbe essere stata raggiunta da questo requisito rilassato? Qualche compilatore/architettura ha effettivamente fatto uso di questo?I vantaggi di std :: string non memorizzare i dati in una posizione di memoria contigua (pre C++ 11)
Se alcune parti della stringa sono memorizzate in posizioni di memoria diverse, l'iteratore non sarebbe eccessivamente complicato? E anche la classe, in quanto avrebbe bisogno di sapere esattamente dove sono diverse parti della stringa.
Non c'è alcun motivo per cui l'iteratore sarebbe eccessivamente complicato. Potrebbe essere implementato come 'pair', con 'operator *' indicizzando la stringa, 'operator ++' incrementando l'indice e così via. La classe dovrebbe ovviamente sapere dove sono le diverse parti, ma può essere molto efficace se conservata in un albero bilanciato. Vedi [corda] (https://en.wikipedia.org/wiki/Rope_ (data_structure)). –
user4815162342
Ecco un altro pro/contro per l'implementazione della corda (che - come ho capito - aveva in mente lo standard come qualcosa che dovrebbe essere possibile): http://www.sgi.com/tech/stl/Rope.html – peterchen