Classe Vector in C++
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- ccts2002
- Linux 1.x
- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
Classe Vector in C++
Salve a tutti!
avrei bisogno di un'informazione riguardo al classe "vector" del C++. mediante la funzione insert(...) posso inserire un elemento nel vettore in una determinata posizione. ma l'indirizzo di questo elemento quale sarà?
mi spiego. ho un vettore di 10 elementi. se ne inserisco uno tra il quarto e il quinto (per esempio) cosa succede agli indirizzi di memoria? l'indirizzo del nuovo elemento è uno nuovo (cioè dove il programma trova una parte di memoria non allocata) o è l'indirizzo dell'ex quinto che andrà quindi ad occupare l'indirizzo dell'ex-sesto, etc...
forse, se ho bisogno che nonostante l'inserimento l'indirizzo sia costante, devo usare le liste, giusto?
grazie!
avrei bisogno di un'informazione riguardo al classe "vector" del C++. mediante la funzione insert(...) posso inserire un elemento nel vettore in una determinata posizione. ma l'indirizzo di questo elemento quale sarà?
mi spiego. ho un vettore di 10 elementi. se ne inserisco uno tra il quarto e il quinto (per esempio) cosa succede agli indirizzi di memoria? l'indirizzo del nuovo elemento è uno nuovo (cioè dove il programma trova una parte di memoria non allocata) o è l'indirizzo dell'ex quinto che andrà quindi ad occupare l'indirizzo dell'ex-sesto, etc...
forse, se ho bisogno che nonostante l'inserimento l'indirizzo sia costante, devo usare le liste, giusto?
grazie!
- lamarozzo
- Linux 3.x
- Messaggi: 732
- Iscritto il: gio 14 lug 2005, 0:00
- Desktop: xfce
- Distribuzione: archlinux
- Località: Roma
Re: Classe Vector in C++
la classe vector salva le informazioni in modo contiguo. Quindi ogni volta che fai un inserimento, la funzione insert deve traslare tutti gli elementi successivi a quello che vuoi inserire. Questa è un'operazione ordine N. Se hai bisogno di fare molti inserimenti, anzichè ricerche, ti conviene utilizzare una linked list.
- m0rdr3d
- Linux 2.x
- Messaggi: 404
- Iscritto il: dom 24 dic 2006, 13:40
- Slackware: Slackware64-current
- Kernel: 3.4.*
- Desktop: KDE 4.8.2
Re: Classe Vector in C++
Secondo la documentazione che trovi qui i vector sono organizzati come aree contigue di memoria, in cui l'inserimento costante (ammortizzato) è dato solo all'inserimento in coda. L'inserimento in un punto qualsiasi è quindi più costoso, come spiegato nella sezione del metodo insert:
Edit: uffa, preceduto...
Se utilizzi spesso l'inserimento in una posizione interna al vector ti consiglio di usare una linked list, come tu stesso suggerivi.Because vectors keep an array format, insertions on positions other than the vector end are performed by moving all the elements between position and the end of the vector to their new positions, and then inserting the new element(s), which may not be a method as efficient as the insertion in other kinds of sequence containers (deque, list).
Edit: uffa, preceduto...
Ultima modifica di m0rdr3d il lun 24 nov 2008, 12:11, modificato 1 volta in totale.
- ccts2002
- Linux 1.x
- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
Re: Classe Vector in C++
ho il problema di dover fare sia inserimenti che ricerche. avevo pensato di usare la classe vector proprio per il problema delle ricerche...fare tante ricerche in maniera sequenziale penso che vorrebbe troppo tempo...
non c'è una via di mezzo, vero????
penso che opterò sui vettori, facendo però ogni volta ricercare l'indirizzo dell'elemento che mi interessa...
non c'è una via di mezzo, vero????
penso che opterò sui vettori, facendo però ogni volta ricercare l'indirizzo dell'elemento che mi interessa...
- lamarozzo
- Linux 3.x
- Messaggi: 732
- Iscritto il: gio 14 lug 2005, 0:00
- Desktop: xfce
- Distribuzione: archlinux
- Località: Roma
Re: Classe Vector in C++
Eccome se ci sono vie di mezzo, come ad esempio gli alberi. Questo è solo uno spunto ma se devi approfondire ti consiglio di chiedere a qualche informatico (esame di algoritmi e strutture dati?).ccts2002 ha scritto: non c'è una via di mezzo, vero????
http://en.wikipedia.org/wiki/Self-balan ... earch_tree
D'altronde il tuo problema è alla base dei database. Dipende un po' dal problema che devi affrontare, ma se è così sensibile ai tempi di ricerca e inserimento ti consiglierei di interfacciarti direttamente ad un DBMS come MySQL.
-
- Linux 1.x
- Messaggi: 103
- Iscritto il: sab 9 ago 2008, 12:39
- Nome Cognome: Valerio
- Slackware: 14
- Kernel: 3.2.29
- Desktop: xfce
- Distribuzione: SalixOS
- Località: Carpineto Romano (RM)
Re: Classe Vector in C++
Purtroppo non conosco bene la STL, ma se ti serve fare molte operazioni di ricerca forse dovresti orientarti verso un tipo di struttura dati diverso basato su albero binario, tipo una map o un set, che se non ricordo male hanno il costo dell'operazione find logaritmico.
edit: magari per una piccola applicazione usare un DBMS è come ammazzare le mosche con un cannone
edit: magari per una piccola applicazione usare un DBMS è come ammazzare le mosche con un cannone
"In wars boy, fools kill other fools for foolish causes." (R. Jordan, The Wheel of Time book 1)
- m0rdr3d
- Linux 2.x
- Messaggi: 404
- Iscritto il: dom 24 dic 2006, 13:40
- Slackware: Slackware64-current
- Kernel: 3.4.*
- Desktop: KDE 4.8.2
Re: Classe Vector in C++
Se puoi darci qualche dettaglio in più possiamo vedere di cercare una soluzione soddisfacente. Non sono molto fresco di strutture dati, ma potrebbe essere l'occasione giusta per rinfrescarsi un po'.
P.S.: a proposito di rinfrescarsi, qui in veneto oggi abbiamo la neve...
P.S.: a proposito di rinfrescarsi, qui in veneto oggi abbiamo la neve...
- ccts2002
- Linux 1.x
- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
Re: Classe Vector in C++
per l'applicazione che sto creando l'interfacciarsi con un database non è proponibile, dato che deve essere distribuibile su qualsiasi computer, che abbia o no un database...e fornirli insieme non mi sembra il caso...
penso che mi orienterò verso i map, utilizzando le liste come contenitori e un map che memorizzi gli indirizzi degli elementi delle liste...in questo modo, almeno teoricamente, dovrei mantenere l'inserimento delle liste e l'accesso agli elementi nella maniera migliore...
ma è una cosa che devo progettare bene per non fare casini...già questo mi costringe ad una riscrittura di buona parte del codice...
grazie mille a tutti!!!!!!!!!!!!!!
penso che mi orienterò verso i map, utilizzando le liste come contenitori e un map che memorizzi gli indirizzi degli elementi delle liste...in questo modo, almeno teoricamente, dovrei mantenere l'inserimento delle liste e l'accesso agli elementi nella maniera migliore...
ma è una cosa che devo progettare bene per non fare casini...già questo mi costringe ad una riscrittura di buona parte del codice...
grazie mille a tutti!!!!!!!!!!!!!!
- ksniffer
- Linux 3.x
- Messaggi: 540
- Iscritto il: lun 30 lug 2007, 13:18
- Kernel: 2.6.34
- Desktop: KDE 4.4.4
- Distribuzione: ArchLinux
- Contatta:
Re: Classe Vector in C++
Potresti provare sqlite. Un database leggerissimo scritto in C che adopera il file system. Sul sito puoi scaricare anche la versione composta da un unico file che puoi includere direttamente nel tuo applicativo. Poi potresti creartri una classe C++ per interfacciarti allo stesso usando le API di sqlite.
- Blizzard
- Master
- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: Classe Vector in C++
lo sto utilizzando per un mio software(ino) e confermo quanto sia spettacolare. Hai un comune file e buona parte delle funzionalità del linguaggio sql.ksniffer ha scritto:Potresti provare sqlite. Un database leggerissimo scritto in C che adopera il file system. Sul sito puoi scaricare anche la versione composta da un unico file che puoi includere direttamente nel tuo applicativo. Poi potresti creartri una classe C++ per interfacciarti allo stesso usando le API di sqlite.
Una vera manna dal cielo.
Gio
P.S.
Se vuoi continuare senza db mi unisco al coro che suggerisce gli alberi (IMHO bst o red-black [2,3,4] )
- ccts2002
- Linux 1.x
- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
Re: Classe Vector in C++
darò un occhiata...la possibilità di includere un database può sempre tornare utile...ksniffer ha scritto:Potresti provare sqlite. Un database leggerissimo scritto in C che adopera il file system. Sul sito puoi scaricare anche la versione composta da un unico file che puoi includere direttamente nel tuo applicativo. Poi potresti creartri una classe C++ per interfacciarti allo stesso usando le API di sqlite.