willygroup
24-11-2008, 13:23
Attualmente nel mio programma C++ ho una classe che contiene un vettore di strutture "alfa".
Ogni struttura "alfa" contiene un vettore di TOT elementi.
Questi TOT elementi però possono essere ripetuti in più strutture, quindi mi ritrovo con dei dati ridondanti.
Avevo pensato di sostituire a tale vettore di TOT di elementi un vettore di TOT Puntatori
e aggiungere alla classe un vettore con TUTTI gli elementi.
Però non riesco a far funzionare il tutto a dovere.
Ho fatto qualche prova con un programmino per vedere se in questo caso funziona, ma ho problemi anche qui.
Probabilmente non ho capito a fondo come funzionano i puntatori.
Credo che il problema sia in fase di inserimento del puntatore nel vettore (***), ma non riesco a risolverlo.
Qualcuno mi può dare una mano?
Ecco il codice:
//myClass.h
#include <vector>
struct myStr{
int a;
int b;
};
typedef myStr* pMyStr;
class myClass{
public:
std::vector<myStr> myVector;
std::vector<pMyStr> PmyVector;
myClass(void);
~myClass(void);
void setMyStr(int a1, int b1);
};
// myClass.cpp
#include "MyClass.h"
myClass::myClass(void){
};
myClass::~myClass(void){
};
void myClass::setMyStr(int a1, int b1){
myStr temp;
temp.a = a1;
temp.b = b1;
myVector.push_back(temp);
// (***)
PmyVector.push_back(&myVector.back());
};
//main.cpp
#include <windows.h>
#include <iostream>
#include "Myclass.h"
int main(){
myClass newClass;
for(int j=0;j<5;j++){
newClass.setMyStr(j,j);
}
std::cout<<"DIRETTO\n";
for(int i=0;i<(int)newClass.myVector.size();i++){
std::cout<<"a = "<<newClass.myVector.at(i).a<<" , b = "<<newClass.myVector.at(i).b<<std::endl;
}
std::cout<<"\nINDIRETTO\n";
for(int i=0;i<(int)newClass.myVector.size();i++){
std::cout<<"a = "<<newClass.PmyVector.at(i)->a<<" , b = "<<newClass.PmyVector.at(i)->b<<std::endl;
}
system("pause");
return 0;
}
//Uscita
DIRETTO
a = 0 , b = 0
a = 1 , b = 1
a = 2 , b = 2
a = 3 , b = 3
a = 4 , b = 4
INDIRETTO
a = 0 , b = 0
a = 0 , b = 0
a = 3562984 , b = 3563080
a = -1414812757 , b = -17891602
a = 4 , b = 4
Ogni struttura "alfa" contiene un vettore di TOT elementi.
Questi TOT elementi però possono essere ripetuti in più strutture, quindi mi ritrovo con dei dati ridondanti.
Avevo pensato di sostituire a tale vettore di TOT di elementi un vettore di TOT Puntatori
e aggiungere alla classe un vettore con TUTTI gli elementi.
Però non riesco a far funzionare il tutto a dovere.
Ho fatto qualche prova con un programmino per vedere se in questo caso funziona, ma ho problemi anche qui.
Probabilmente non ho capito a fondo come funzionano i puntatori.
Credo che il problema sia in fase di inserimento del puntatore nel vettore (***), ma non riesco a risolverlo.
Qualcuno mi può dare una mano?
Ecco il codice:
//myClass.h
#include <vector>
struct myStr{
int a;
int b;
};
typedef myStr* pMyStr;
class myClass{
public:
std::vector<myStr> myVector;
std::vector<pMyStr> PmyVector;
myClass(void);
~myClass(void);
void setMyStr(int a1, int b1);
};
// myClass.cpp
#include "MyClass.h"
myClass::myClass(void){
};
myClass::~myClass(void){
};
void myClass::setMyStr(int a1, int b1){
myStr temp;
temp.a = a1;
temp.b = b1;
myVector.push_back(temp);
// (***)
PmyVector.push_back(&myVector.back());
};
//main.cpp
#include <windows.h>
#include <iostream>
#include "Myclass.h"
int main(){
myClass newClass;
for(int j=0;j<5;j++){
newClass.setMyStr(j,j);
}
std::cout<<"DIRETTO\n";
for(int i=0;i<(int)newClass.myVector.size();i++){
std::cout<<"a = "<<newClass.myVector.at(i).a<<" , b = "<<newClass.myVector.at(i).b<<std::endl;
}
std::cout<<"\nINDIRETTO\n";
for(int i=0;i<(int)newClass.myVector.size();i++){
std::cout<<"a = "<<newClass.PmyVector.at(i)->a<<" , b = "<<newClass.PmyVector.at(i)->b<<std::endl;
}
system("pause");
return 0;
}
//Uscita
DIRETTO
a = 0 , b = 0
a = 1 , b = 1
a = 2 , b = 2
a = 3 , b = 3
a = 4 , b = 4
INDIRETTO
a = 0 , b = 0
a = 0 , b = 0
a = 3562984 , b = 3563080
a = -1414812757 , b = -17891602
a = 4 , b = 4