Итак, я создаю что-то вроде поиска A * и создаю объекты, как показано ниже, когда это необходимо в моем алгоритме. Дело в том, что на создание каждого из них уходит 0,1 секунды. Мой поиск занимает 40 секунд, 39 секунд из которых - создание объекта.
Я действительно понятия не имею. Довольно новый. Любая помощь приветствуется.
class Node{
private:
int numAncestors;
float gvalue;
float hvalue;
float fvalue;
int adj;
Node* parent;
public:
inline Node(int vertex, int goal, vector< vector<double> > xy){
adj = vertex - 1;
float x1 = (float)xy[vertex-1][0];
float y1 = (float)xy[vertex-1][1];
float x2 = (float)xy[goal-1][0];
float y2 = (float)xy[goal-1][1];
hvalue = sqrtf((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
//fvalue = hvalue + gvalue;
}
inline float getF(){
return hvalue + gvalue;
}
inline void setG(float newG){
gvalue = newG;
}
inline float getG(){
return gvalue;
}
inline int getAncestors(){
return numAncestors;
}
void setAncestors(int ancestors){
numAncestors = ancestors;
}
void setParent(Node* n, vector< vector<double> > xy){
parent = n;
float x1 = (float)xy[n->getAdj()][0];
float y1 = (float)xy[n->getAdj()][1];
float x2 = (float)xy[adj][0];
float y2 = (float)xy[adj][1];
float x = sqrtf((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
setG(n->getG() + x);
setAncestors(n->getAncestors()+1);
}
inline Node* getParent(){
return parent;
}
inline int getAdj(){
return adj;
}
};
Это занимает 0,1 секунды:
clock_t nodetest = clock();
Node* s = new Node(g,e,xy);
printf("Time taken: %.2fs\n", (double)(clock() - nodetest)/CLOCKS_PER_SEC);
Это занимает 0,0 секунды:
clock_t thisLoop = clock();
float x1 = (float)xy[x-1][0];
float y1 = (float)xy[x-1][1];
float x2 = (float)xy[current->getAdj()][0];
float y2 = (float)xy[current->getAdj()][1];
float x = sqrtf((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
printf("Time taken: %.2fs\n", (double)(clock() - thisLoop)/CLOCKS_PER_SEC);
Я бы подумал, может быть, это то, что объект был занят или что-то в этом роде, но похоже, что все время потрачено только на создание объекта.