|
|||||||
|
|
|
![]() |
|
|
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: 18:01.



















