PDA

Visualizza la versione completa : [c++] Popolare vector di valori senza ricorrere al push_back()


freetom
18-04-2012, 06:42
Siccome dovrei crearmi TOT vector di tot elementi numerici :

Es.

vector <int> gruppo1 contenente
5-6-14-17-23-28-33-38-43-44-45-46-47-48-53-58-63-68-73-78-83-88
vector <int> gruppo2 contenente
03-04-05-06-07-08-13-14-15-16-17-18-23-24-33-34-43-44-53-54-63-64-73-74
ecc...
mi piacerebbe, se fosse possibile ma non riesco a ritrovare nulla al riguardo..., :sbav:
non ricorrere al push_back() per aggiungere ogni singolo valore "manualmente" con molte righe di codice bensì inserirli in ogni gruppo con una sola riga di codice...

Tipo..., e sono consapevole di star scrivendo un'eresia ma è solo un es. per far capire cosa mi piacerebbe ottenere:

Dopo aver definito i singoli vector...
Assegnare loro rispettivamente i numeri componenti con una sola riga...
gruppo1 =[5-6-14-17-23-28-33-38-43-44-45-46-47-48-53-58-63-68-73-78-83-88];
ecc...
e non facendo ad es. per il gruppo1
gruppo1._push_back(5);
ecc...

Tnx

Andrea Simonassi
18-04-2012, 09:42
Originariamente inviato da freetom

mi piacerebbe, se fosse possibile ma non riesco a ritrovare nulla al riguardo...,
non ricorrere al push_back() per aggiungere ogni singolo valore "manualmente" con molte righe di codice



Ho capito bene o non hai idea di cosa sia un loop? :D

Ad ogni modo esiste la funzione set_union in <algorithm>

http://www.cplusplus.com/reference/algorithm/set_union/

Who am I
18-04-2012, 09:47
template <class T>
void init(vector<T>& v,unsigned int n, ...)
{
T temp;
va_list vl;
va_start(vl,n);
for(unsigned int j=0;j<n;j++)
{
temp=va_arg(vl,T);
v.push_back(temp);
}
va_end(vl);
}

oregon
18-04-2012, 09:50
Originariamente inviato da Andrea Simonassi
Ho capito bene o non hai idea di cosa sia un loop? :D


E' così ? :madai!?:

freetom
18-04-2012, 10:03
Originariamente inviato da oregon
E' così ? :madai!?:

Se per loop... intendete il for l'ho capito e me ne servo...

ma se intendete altro.. no non l'ho capito :mame:




template <class T>
void init(vector<T>& v,unsigned int n, ...)
{
T temp;
va_list vl;
va_start(vl,n);
for(unsigned int j=0;j<n;j++)
{
temp=va_arg(vl,T);
v.push_back(temp);
}
va_end(vl);
}




Questo di "Who am I" credo faccia al caso mio ma dove li inserisco i singoli valori definiti?

Grazie 1000 e ricordate che non mangio pane e c++ come voi altri :mame:
Mi limito a servirmene per i miei ludici lotto statistici scopi come meglio riesco :) Tutto qui.

Un saluto a tutti/e e grazie ancora per la rapidità di risposta anche!

ps: "Ad ogni modo esiste la funzione set_union in <algorithm>"
Ad ogni modo stasera guardo anche questa funzione sperando di riuscire a capirla e ad utilizzarla :stordita: Grazie Andrea! :)

:ciauz:

Nel frattempo mi è stato risposto anche così:
Per inserire ad esempio questi valori 10,20,30,40,50.



static const int_array = { 10,20,30,40,50 };

int main()
{
// inizializza il vettore con gli interi
vector<int> int_vector( int_array[0], int_array[5] );
}


NB: il secondo parametro del vector punta all'elemento SUCCESSIVO l'ultimo elemento di array

quindi se ho capito bene...

per "accedere" al valore 30 ad esempio io basta... che lo richiami con:




int valore = int_vector[int_array[3]]; ???



O è del tutto sbagliato? C'e' una via ancora + semplice? Comunque già questa potrebbe bastarmi per ridurre notevolmente il lavoro.. che mi aspetta :stordita:

tnx

Who am I
18-04-2012, 10:15
E' una funzione con argomenti variabili, che chiami ad esempio così:



vector<char> v;
init(v,3,'c','a','b');


Ma prova anche il metodo suggerito da Andrea Simonassi, credo sia più "elegante".

freetom
18-04-2012, 10:23
Originariamente inviato da Who am I
E' una funzione con argomenti variabili, che chiami ad esempio così:



vector<char> v;
init(v,3,'c','a','b');


Ma prova anche il metodo suggerito da Andrea Simonassi, credo sia più "elegante".

Gentilissimo ma mi faresti un es. con il caricamento in v1 e v2 di due gruppi di numeri?
Es.

in v1 1,2,3
in v2 4,5,6

caricati automaticamente grazie alla tua funzione.




template <class T>
void init(vector<T>& v,unsigned int n, ...)
{
T temp;
va_list vl;
va_start(vl,n);
for(unsigned int j=0;j<n;j++)
{
temp=va_arg(vl,T);
v.push_back(temp);
}
va_end(vl);
}




Grazie mille :ciauz:

Who am I
18-04-2012, 13:38
vector<int> v1,v2;
init(v1,3,1,2,3);
init(v2,3,4,5,6);

freetom
18-04-2012, 13:43
Originariamente inviato da Who am I


vector<int> v1,v2;
init(v1,3,1,2,3);
init(v2,3,4,5,6);


Intanto grazie 1000!!!

Stasera provo e ti faccio sapere ;)

Grazie ancora!

:ciauz:

freetom
18-04-2012, 18:32
Originariamente inviato da freetom
Intanto grazie 1000!!!

Stasera provo e ti faccio sapere ;)

Grazie ancora!

:ciauz:


Messo nel corpo del programma




vector<int> cinquina60;
init(cinquina60,5,8,10,13,17,19,20,25,28,32,34,39, 42,44,47,49,53,58,59,60,62,65,67,68,74,75,77,79,83 ,87);



volendo caricare cinquina60 dei valori che vedi sopra e ho messo il tuo codice




template <class T>
void init(vector<T>& v,unsigned int n, ...)
{
T temp;
va_list vl;
va_start(vl,n);
for(unsigned int j=0;j<n;j++)
{
temp=va_arg(vl,T);
v.push_back(temp);
}
va_end(vl);
}



dopo




int main (int argc, char *argv[])
{




Ma ovviamente mi da errore...

Come lo devo sistemare a modo?

Grazie infinite!

:ciauz:

Loading