Ho una classe chiamata Spring in un sistema di particelle. Il costruttore assomiglia:Riferimento all'elemento nel vettore 2D (C++)
Spring(Particle& _a, Particle& _b);
E ho un vettore di particelle e utilizzare
Spring mySpring = Spring(myParticles.at(j),myParticles.at(j+1));
all'interno di un ciclo per aggiungere una forza elastica fra due particelle. Tutto funziona bene finora. Tuttavia, voglio usare un vettore 2D di particelle. Cioè:
Spring mySpring = Spring(myParticles.at(i).at(j),myParticles.at(i).at(j+1));
E non ottengo un riferimento alla particella. Nel primo esempio, ogni volta che cambio la particella nella mia classe primaverile, la particella nel vettore viene cambiata. Nel secondo esempio le modifiche sono solo localmente. Come posso cambiare le particelle nel vettore 2D?
EDIT: provo a fare alcune cose chiare:
ho alcuni sistemi particellari e ciascuno di essi è costituito da un numero di particelle. Ogni particella dovrebbe interagire solo con le altre particelle che si trovano nello stesso sistema di se stesso. Quindi ho un vettore di sistemi di particelle con ciascun sistema di particelle che è un vettore di oggetti particellari. (Questo rende il vettore 2D). La prima dimensione (i) è il sistema, la seconda (j) la particella individuale. Le particelle nel sistema interagiscono tra loro (si scontrano, evitano, qualunque cosa ..) e le loro posizioni cambiano. E il vettore viene "aggiornato". (Cioè, il riferimento funziona).
Tuttavia, ho un secondo vettore (1d) di forze elastiche. Anche la forza della molla viene utilizzata per aggiornare le posizioni delle particelle. mio costruttore effettua le seguenti operazioni:
Spring::Spring(Particle& _a, Particle& _b) {
a=&_a;
b=&_b; }
Con A e B sono particelle *. Quindi memorizzo i puntatori a due particelle nel vettore 2D. Un'altra funzione Spring.doSpring() modifica le posizioni delle particelle.
a->pos.x=300;
o
a->velocity+=something..
Nel primo esempio ho postato ho usato solo un sistema di particelle e quindi non c'era bisogno di un vettore 2d. E tutto funziona bene. Le particelle nel vettore vengono aggiornate. Ma con il secondo esempio il mio programma gira ma in qualche modo, indipendentemente dalla funzione doSpring, le particelle nel vettore 2D non vengono aggiornate.
Come si dichiara "myParticles"? – coelhudo
Ehi, un consiglio da http://www.drdobbs.com/cpp/184401863: "Non etichettare troppo i nomi, ma usa una convenzione di denominazione coerente: ci sono solo due cose da fare: a) non usare mai" nomi subdoli , "quelli che iniziano con un carattere di sottolineatura o che contengono un doppio trattino basso"; Words of Herb Sutter and Andrei Alexandrescu – coelhudo