questo mio cod funziona egregiamente ma...
Per la sua struttura (temo...) è incredibilmente lento...codice:#include <iostream> #include <fstream> #include <string> #include <vector> #include <algorithm> #include <sstream> #include <iomanip> using namespace std; string intToString(int value) { stringstream ss; ss << value; return ss.str(); } string floatToString(float value) { stringstream ss; ss << value; return ss.str(); } int main (int argc, char *argv[]) { //dichiarazioni... vector <string> vec; vector <string> vec2; int contapunti=0; int presenze=0; int conteggio=0; vector <int> ritardi; int contaestrazioni=0; vector <string> riassunto; //--------------------- cout << "\n\n\n"; cout << "Programma created by Lotto_tom75.\nOgni diritto riservato.\n\n"; cout << "\n\n\n"; cin.get(); ifstream fin("quaterneuscite.txt"); if (fin) { string s; while(fin) // cattura tutti gli errori. { getline(fin,s); //cout << s; vec.push_back(s); } } int sz = vec.size()-1; ifstream f2in("estrazioni.txt"); if (f2in) { string s; while(f2in) // cattura tutti gli errori. { getline(f2in,s); //cout << s; vec2.push_back(s); } } int sz2 = vec2.size()-1; for (int z=0; z<sz; z++) { string testo,estratta; vector<string> token; int inizio,fine,i,lparola; bool continua; testo = vec[z]; continua = true; inizio = -1; /*1*/ while(continua){ fine = testo.find(',',inizio+1); if(fine==-1){ continua = false; fine = testo.length(); } // Estrazione parola lparola = (fine-inizio)-1; estratta = testo.substr(inizio+1,lparola); token.push_back(estratta); inizio = fine; } for (int z2=0; z2<sz2; z2++) { string testo2,estratta2; vector<string> token2; int inizio2,fine2,x,lparola2; bool continua2; testo2 = vec2[z2]; continua2 = true; inizio2 = -1; /*1*/ while(continua2){ fine2 = testo2.find(',',inizio2+1); // ultima parola if(fine2==-1){ continua2 = false; fine2 = testo2.length(); } // Estrazione parola lparola2 = (fine2-inizio2)-1; estratta2 = testo2.substr(inizio2+1,lparola2); token2.push_back(estratta2); inizio2 = fine2; } for(x=0;x<token2.size();x++) //CONTROLLO EVENTUALI VALORI UGUALI E AGGIORNAMENTO INDICI RELATIVI xE (conteggio) e xA (conteggio2).. for (int y=0; y<token2.size();y++) { for (x=0; x<token.size();x++) { if (token2.at(y)==token.at(x)) { //cout << "VALORE/I UGUALE/I: "; //cout << token2.at(y); //cout << "Vs"; //cout << token.at(x); //cin.get(); contapunti++; } else { //cout << "VALORE/I DIVERSO/I: "; //cout << token2.at(y); //cout << "Vs"; //cout << token.at(x); //cin.get(); } } } contaestrazioni++; //cout << "PUNTI X QUESTA QUATERNA: "; //cout << contapunti; //cout << "\n"; if (contapunti==2) { presenze++; conteggio=0; ritardi.push_back(conteggio); //cin.get(); } else { conteggio++; ritardi.push_back(conteggio); } cout << "tutti i ritardi per questa estrazione: "; for (int i=0; i< ritardi.size(); i++) { //cout << ritardi[i]; //cout << ","; } //prendo il valore massimo e il valore ultimo di ritardo della quaterna esaminata... vector<int>::iterator max; max = max_element(ritardi.begin(), ritardi.end()); cout << *max << endl; cout << ritardi[ritardi.size()-1] << endl; int ritardomassimo =*max; cout << "\n"; cout << "ritardo massimo per questa quaterna: "; cout << ritardomassimo; int ritardoultimo = ritardi[ritardi.size()-1]; cout << "\n"; cout << "ritardo ultimo per questa quaterna: "; cout << ritardoultimo; int colpirimanenti = *max-(ritardi[ritardi.size()-1]); cout << "\n"; cout << "colpi rimanenti per questa quaterna: "; cout << colpirimanenti; //cin.get(); //conversione in stringhe... //string rapportorars2; string contaestrazioni2; string colpirimanenti2; string ritardomassimo2; string ritardoultimo2; string presenze2; colpirimanenti2 = intToString(colpirimanenti); ritardomassimo2 = intToString(ritardomassimo); ritardoultimo2 = intToString(ritardoultimo); presenze2 = intToString(presenze); //-------------------------- string stringariassuntiva = "presenze:"+presenze2+"°***quaterna:"+testo+"***"+" rs: "+ritardomassimo2+" ra: "+ritardoultimo2+" colpirimanenti: "+colpirimanenti2; riassunto.push_back(stringariassuntiva); //cin.get(); cout << "\n\n"; cout << "Quaterna : "; cout << testo; cout << "\n\n"; cout << "Elaborazione n. "; cout << contaestrazioni; cout << "\n"; //cin.get(); //RIAZZERO TUTTO X ANALIZZARE LA PROSSIMA QUATERNA... //ritardi.clear(); //conteggio=0; contapunti=0; //contaestrazioni=0; //presenze=0; //riassunto.clear(); //presenze=0; ritardomassimo=0; ritardoultimo=0; } printf ("\a"); //SALVO IN UN FILE... il risultato dell'elaborazione quaterna... ------------------- ofstream fout; fout.open("report-ritardi-quaterne-uscite-punti2.txt", ios::app); string datoultimo= riassunto[riassunto.size()-1]; fout << datoultimo; fout << "\n"; presenze=0; riassunto.clear(); //---------------------------------------------------------------------------------- //RIAZZERO TUTTO X ANALIZZARE LA PROSSIMA QUATERNA... ritardi.clear(); conteggio=0; contapunti=0; contaestrazioni=0; presenze=0; riassunto.clear(); presenze=0; } printf ("\a\a\a"); cout << "finish prima quaterna..."; cin.get(); }
(ci mette ca 6 giorni per confrontare le 22.000 righe ca del primo file con le 4600 righe dell'altro)
Penso che una struttura analoga ma con basi + pratiche e logiche possa essere enormemente più veloce ed ottenere i medesimi risultati...
Qualcuno/a è in grado di tentarne l'ottimizzazione in termini di velocità?
GRAZIE a tutti/e
![]()

Rispondi quotando