|
|
|
![]() |
|
Strumenti |
![]() |
#1 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Problema Vector
Per studiare gli iteratori e gli algoritmi generici ho sfornato sto cod:
Codice:
#include <iostream> #include <vector> #include <string> using namespace std; vector<int> elabora(vector<int> &elem); int main() { int def[5]={'1', '3', '9', '4', '7'}; vector<int> es(5, def); elabora(es); return 0; } vector<int> elabora(vector<int> &elem) { sort(elem.begin(), elem.end());// ordina vector<int>::iterator it = elem.begin();// itera e monstra for(;it<elem.end();it++) { cout << *it <<endl; } return elem; } Quote:
|
|
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
A meno che io non abbia capito a cacchio la stl (probabile) non puoi
costruire una funzione che ritorna un vettore. ![]() Questo è meglio se scritto così Codice:
vector<int>::iterator it ; for(it= elem.begin();it<elem.end();it++) { cout << *it <<endl; } Codice:
copy(vContainer.begin(),vContainer.end(),ostream_iterator<int>(cout, " ")); cout<<endl; ancora: meglio usare '\n' al posto di endl :l'elaborazione è più veloce ciao ![]() |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ho risolto cosi:
Codice:
#include <vector> #include <string> #include <cstdio> #include <algorithm> #include <iostream> using namespace std; // PROTOTIPI vector<int> elabora(vector<int> &elem); // \PROTOTIPI int main() { int def[5]={ 1,3,9, 4, 7}; vector<int> es(def, def+5); elabora(es); system("PAUSE"); return 0; } /** * Elabora il vettore passato per riferimento */ vector<int> elabora(vector<int> &elem) { /* * Lo ordina */ sort(elem.begin(), elem.end()); /* * Lo itera e ciclando lo mostra */ vector<int>::iterator it = elem.begin(); for(;it<elem.end();it++) { cout << *it <<endl; } return elem; } |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Non lo ha ordinato
![]() |
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
Codice:
#include <vector> #include <string> #include <cstdio> #include <algorithm> #include <iostream> using namespace std; // PROTOTIPI vector<int> elabora(vector<int> &elem); // \PROTOTIPI int main() { int def[5]={ 3, 1, 9, 7, 4}; vector<int> es(def, def+5); elabora(es); system("PAUSE"); return 0; } /** * Elabora il vettore passato per riferimento */ vector<int> elabora(vector<int> &elem) { /* * Lo ordina */ sort(elem.begin(), elem.end()); /* * Lo itera e ciclando lo mostra */ vector<int>::iterator it = elem.begin(); for(;it<elem.end();it++) { cout << *it <<"\n"; } return elem; } |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
ahhh aspetta:
il compilatore sembra ignorare del tutto il return, quello che è strano e che non ti dice niente(boh...ti dovrebbe dire che non puoi ritornare un vector). L'elaborazione la fa per riferimento giustamente. prova a mettere void elabora(vector<int> &elem) e a togliere il return elem; |
![]() |
![]() |
![]() |
#7 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
Tutto funziona perchè viene fatto per riferimento. A meno che non prenda l'inizio come template del vector.. boh!?! ps Usa un solo stile di commento,altrimenti quando cominci a superare le 20 righe non ti ci raccapezzi tu stesso(e nemmeno gli altri). Commenta solo ciò che non è autoesplicante ![]() |
|
![]() |
![]() |
![]() |
#9 | |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
![]() Grazie per non averci lasciato il dubbio. ![]() Concordo con te sul fatto di maneggiare i vector solo per riferimento,che è la cosa che consigliano tuti. Cià Cià |
|
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:06.