2012-03-19 13 views
6

Esiste un contenitore "standard" (STL, boost) che può presentare più blocchi di memoria come uno continuo singolo? Ho bisogno di lavorare con alcuni dati con seguenti condizioni:Contenitore per presentare più blocchi di memoria come singolo continuo

  • dimensione totale dei dati non è noto in anticipo (risposta web)
  • memoria è allocata in blocchi (con qualche funzione di allocazione esterna, che non ho controllo di)
  • liberazione di memoria non è controllata da me, così riassegnazioni sono relativamente costosi

così, dopo aver ottenuto tutti i dati, ho una lista di blocchi di memoria. E ho bisogno di applicare alcuni algoritmi STL (ricerca, copia, ecc.) Ai dati nel loro complesso. C'è una soluzione per scrivere container per contenere informazioni su questi chunks + forward iterator che è in grado di "saltare" da un blocco a un altro.

Ma il problema sembra piuttosto generale, quindi spero che ci sia una risposta ben nota che mi manca. Grazie in anticipo.

risposta

4

La memoria è fornita a voi, voi dite. Sembra che tu non voglia copiarlo. Nessun problema, la filosofia STL è abbastanza flessibile. In realtà non hai bisogno di un contenitore; sono solo lì per la gestione della memoria e questo è già stato curato.

Cosa è do necessario è un iteratore. Non c'è uno standard; dovrai scriverne uno tu stesso Ci sono troppe piccole variazioni per fornire una soluzione standard per questo. Ma non preoccuparti, è abbastanza facile. Si ottiene il typedef necessario se si eredita da std::iterator<value_type>, quindi è necessario scrivere solo operator* (semplice) e operator++/operator--/operator+/operator- (che capisce i blocchi).

+0

Sono assolutamente d'accordo che ho bisogno di un iteratore e l'ho menzionato come una possibile soluzione. Ma usare un iteratore senza un contenitore mi sembra strano. Perché dovrei ottenere il mio 'begin()' e 'end()' in qualche modo, quindi incapsulare questa roba in un contenitore sembra naturale. Forse la parola _container_ è abusata qui da me.Non sto parlando del concetto di contenitori STL, ma di qualche "supporto" per frammenti separati che li incapsulerebbe. Speravo solo di non dover implementare questa roba da solo. Comunque, grazie per una risposta. –

+0

"_Container_" è ben definito in C++ (è il capitolo 23 dello standard). – MSalters

0

Così, dopo aver ottenuto tutti i dati, ho un elenco di blocchi di memoria. E ho bisogno di applicare alcuni algoritmi STL (ricerca, copia, ecc.) Ai dati nel loro complesso. C'è una soluzione per scrivere container per contenere informazioni su questi chunks + forward iterator che è in grado di "saltare" da un blocco a un altro.

Sembra che tu abbia bisogno di un iteratore che attraversi senza problemi tutti i tuoi blocchi. std::deque<> fornisce un iteratore simile perché assegna anche memoria in blocchi.

A meno che non sia davvero necessario in un blocco di memoria contiguo. In questo caso, tutti i blocchi dovrebbero essere copiati in un unico pezzo di memoria continuo.

Problemi correlati