|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
[C++] Inizializzare vector con 8 elementi
Ho questa classe contenuta in un header:
Codice:
typedef struct CubeCoords
{
Vector3D currentTraslation; //traslation of the cube in OBJECT SPACE
Vector3D currentRotation; //rotation of the cube in OBJECT SPACE
//vertexes
std::vector<Vector3D> verticesOBS; //vertices coords in OBJECT SPACE
std::vector<Vector3D> vertices; //vertices coords in WORLD SPACE
Vector3D center; //the center of the cube
};
class Cube_Base
{
protected:
const float dimension;
private:
CubeCoords coords;
... ometto il resto perchè non è rilevante
};
Lo ho fatto in questo modo (stupido) dentro al costruttore della classe Cube_Base e vorrei sapere qual'è la forma contratta per farlo: Codice:
coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); coords.verticesOBS.push_back(new Vector3D(0, 0, 0)); Codice:
std::vector<int> second (4,100); // four ints with value 100 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Mi par di ricordare che usavi un compilatore che supporta C++11, quindi utilizza una std::initializer_list e inizializza il tuo vector nella dichiarazione dentro alla struct:
Codice:
struct CubeCoords
{
std::vector<Vector3D> verticesOBS = { Vector3D(0, 0, 0), ripeti altre 7 volte };
// OPPURE
std::vector<Vector3D> verticesOBS = std::vector<Vector3D>(8, Vector3D(0, 0, 0));
};
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Senza contare che se il costruttore di default di Vector3D inizializza le coordinate a 0, puoi tralasciare di scrivere esplicitamente il valore.
Ah, il tuo modo col push_back è sbagliato! L'operatore new restituisce dei puntatori, mentre il tuo vector contiene oggetti, non i loro puntatori... Ultima modifica di vendettaaaaa : 31-08-2013 alle 13:52. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Se il compilatore e Vector3D supportano le initializer lists:
Codice:
coord.verticesOBS = {
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 },
{ 0,0,0 }
};
Codice:
//definisci una funzione tipo questa
std::vector< Vector3D > make_vertices( float[] coord )
{
std::vector< Vector3D > res;
int vertices = sizeof(coord)/(sizeof(float)*3);
for( int i = 0; i < vertices; i += 3 )
res.push_back(Vector3D( coord[i],coord[i+1],coord[i+2] ) );
return res;
}
//e usala cosi'
float coords[] = {
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
};
coord.verticesOBS = make_vertices(coords);
Altrimenti, se ti serve solo di inizializzare tutto con lo stesso valore, il piu' facile: Codice:
coords.verticesOBS.resize( 8, Vector3D(0,0,0) ); Codice:
coord.verticesOBS.resize( 8 ); Ultima modifica di Tommo : 31-08-2013 alle 14:21. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Grazie, correggo subito gli errori e sostituisco.
Quanta roba che sbaglio ancora. Verranno tempi migliori! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:26.



















