Voilà, j’ai un programme qui me pose problème :
A partir d’un fichier donné (généré par un autre programme), je me
retrouve à lire environ 500x864 positions et vitesses (donc encore x6,
et le environ c’est parce que le 500 est arbitraire). Ca fait quand
même pas mal de données à traiter… Le but, c’est de calculer une
intégrale sur les vitesses (les positions sont pout un autre calcul).
Mon idée : une classe lit le fichier, enregistre
le tout dans deux vecteurs, et envoye l’adresse de ces vecteurs à la
classe chargée de les traiter. Je me retrouve donc avec vector * v à traiter.
Mon problème : c’est sûrement très simple, bête et méchant, mais
je trouve pas comment accéder à l’élément “k” de ce vecteur pour
l’utiliser; je vois partout sur Internet qu’on est censé pouvoir utiliser la
fonction at() qui est plus sûre que l’opérateur [], mais si elle fonctionne bien pour les string par
exemple, elle semble inexistante pour les vecteurs : no matching function for call to `vector<double,allocator >::at (int)’
Je mets un bout de code (simplifié au niveau des calculs) pour l’exemple :
class Reader {
…
vector * getVelocities();
…
}
class Velocity {
…
vector * v;
…
}
double Velocity::avaf(int p, int atom, int time, int t) {
return (v->at(3*(nattime+atom)+p) * v->at(3(nat*(time+t)+atom)+p));
}
void Velocity::calculate(int nat, int nos, double dt, vector * veloc) {
v = veloc;
cout << avaf(0, 1, 0, 0)<< endl;
}
int main(…) {
…
Reader r; Velocity v;
v.calculate(864, 500, 0.05, r.getVelocities());
…
}
Quelqu’un pourrait-il m’aider siouplait? Soit avec la solution (et
après en avoir vu la simplicité je vais certainement pouvoir me jeter
par la fenêtre, à moins que ce soit un fichier manquant de mon compilo g++), soit avec une idée d’une meilleure approche du
problème (mais là aussi par la fenêtre après avoir passé un après-midi
là-dessus )