Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    [c++] Problemino con size();

    Ho questo array:

    codice:
    int nums[] = { 1,2,3,4,5,6 };
    
    cout << nums.size();
    
    cin.get;
    Invece di compilarlo ed eseguirlo e darmi a video il numero degli elementi (in questo caso 6) mi da questo errore:

    generatore.cpp request for member `size' in `nums', which is of non-class type `int[6]'

    TNX


  2. #2
    request for member `size' in `nums', which is of non-class type `int[6]'
    Il vettore che hai creato non è un oggetto ma istanza di un tipo di dato elementare, quindi, non dispone del metodo size ...

    In questo caso puoi utilizzare sizeof:
    codice:
    int nums[] = { 1,2,3,4,5,6 };
    cout << sizeof(nums)/sizeof(int);
    Ti consiglio di approfondire 2 contenitori in particolare: map e deque:
    http://www.cplusplus.com/reference/stl/deque/
    http://www.cplusplus.com/reference/stl/map/
    Mi sembra di aver capito che lavori principalmente con php, quindi, lavorare direttamente con gli array potrebbe essere noioso (non sono completi come quelli di php).

    Per una panoramica sui contenitori della stl ti consiglio di visitare il seguente link: http://www.cplusplus.com/reference/stl/
    Experience is what you get when you don’t get what you want

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    GRAZIE infinite

    Adesso mi rimarrebbe solo questo...

    "Il vettore che hai creato non è un oggetto ma istanza di un tipo di dato elementare, quindi, non dispone del metodo size ...

    In questo caso puoi utilizzare sizeof:
    int nums[] = { 1,2,3,4,5,6 };
    cout << sizeof(nums)/sizeof(int);"

    Analogamente a ...

    codice:
    vector <int> gruppo;
    cin >> a;
    array_push(gruppo, a);
    cin >> b;
    array_push(gruppo, b);
    cin >> c;
    array_push(gruppo, c);
    con un' istanza di un tipo di dato elementare quale è nums come ci si comporta per aggiungervi elementi da zero?

    Nel mio caso particolare avrei esigenza di aggiungere "righe" di un file txt una per una

    es:

    Dato un file file.txt
    contenente...

    1,2,3,4,5
    10,12,14,16,18
    23,25,32,46,89

    dovrei "popolare" in automatico riga x riga l'istanza di un tipo di dato elementare (nums)

    in modo da avere secondo l'esempio:

    caso1 (x riga 1)

    int nums[] = { 1,2,3,4,5 };

    caso2 (x riga 2)

    int nums[] = { 10,12,14,16,18 };

    caso 3 (x riga 3)

    int nums[] = { 23,25,32,46,89 };

    Ancora grazie comunque!


  4. #4
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Per adesso sono arrivato fin qui...

    con un

    codice:
    vector <string> vec;
    vec.push_back(s);
    sono riuscito a popolare il vector delle righe "stringhe" volute...

    adesso mi rimane solo da "sostituire" ai valori fissi

    1,2,3,4,5 dell'esempio... sotto riportato...

    codice:
    int nums[] = { 1,2,3,4,5 };
    il valore dinamico... s ("6,7,8,9,10") scomponendolo se necessario... nei singoli elementi (interi) 6,7,8,9,10

    per avere appunto il popolamento "dinamico" di nums[].


    Grazie a tutti/e x i vostri consigli in tal senso


    In sostanza credo che dovrei ... semplicemente...
    "trasformare" una stringa "A,B,C,D,E" in un insieme di elementi di interi A,B,C,D,E in modo poi da popolare opportunatamente int nums[] così:

    int nums[] = { A,B,C,D,E };


  5. #5
    Se ho ben capito tu hai un file formato in questo modo:
    codice:
    0,1,2,3,4,5
    6,7,8,9,10,11
    12,13,14,15,16,17,18,19
    Nel quale ogni riga contiene degli interi.
    Il tuo problema è creare una struttura dati atta a contenerla...

    Secondo me, il modo più semplice per utilizzarli è di creare un tipo di dato che consenta il parseraggio:
    codice:
    class Riga 
    {
    	/**@todo aumentare la sua complessità a seconda delle esigenze*/
    	private:
    		string _riga;
    		string _separatore;
    		vector<int> _values;
    	public:
    		Riga (string riga, string separatore = ",") {
    			this->_riga = riga;
    			this->_separatore = ",";
    			this->_parse ();
    		}
    		vector<int> getValues () {
    			return this->_values;
    		}
    	private:
    		void _parse () {
    			size_t start = 0;
    			size_t end = this->_riga.find_first_of (this->_separatore);
    			do {
    				this->_values.push_back (this->_charToInt(this->_riga.substr(start, end-start)));
    				start = end+1;
    				end = this->_riga.find_first_of (this->_separatore, start);
    				end = (end == string::npos) ? this->_riga.size() : end;
    			} while (start != end+1);
    		}
    		int _charToInt (string stringa) {
    			return atoi (stringa.c_str());
    		}
    };
    Notare il metodo parse che, partendo da una riga formattata nel seguente modo (dove ogni lettera è un intero):
    codice:
    "a,b,c,d,e,f,g,h,....,z"
    "crea" un vector contenente gli interi che formano la riga.

    Si potrebbe anche eseguire un overloading per consentire la stampa di questo nuovo tipo di dato...
    ...ad esempio:
    codice:
    ostream & operator << (ostream &os, Riga &riga) {
    	vector<int> temp = riga.getValues();
    	for (vector<int>::iterator i = temp.begin(); i != temp.end(); i++) {
    		os << *i << '\t';
    	}
    	os << endl;
    	return os;
    }
    A questo punto, leggendo il file riga per riga, si potrà creare un vettore di Riga:
    codice:
    	vector<Riga> array;
    	fstream file ("file.txt", ios::in);
    	
    	string riga;
    	while(getline(file, riga)) {
    		array.push_back(Riga(riga));
    	}
    
    	for (vector<Riga>::iterator i = array.begin(); i != array.end(); i++)
    		cout << *i;
    Non so se il codice funziona correttamente (l'ho buttato giù su due piedi), in ogni caso, ti consiglio di prenderlo come spunto e implementare una tua versione ...

    PS: Nel caso ti venisse più semplice potresti formattare la stringa in modo opportuno e leggere gli interi utilizzando stringstream (come se fosse explode di php).
    Experience is what you get when you don’t get what you want

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.