Código C++:
Ver original
class SuperNode{ private: int _id; int _alias; int _level; int _pos; vector<vector<SuperNode*>> _roadtoit; vector<SuperNode*> _Neighbor; public: SuperNode(){ ; } SuperNode(int id, int alias, int level, int pos){ _id = id, _alias = alias, _level = level, _pos = pos; } void add_Neighbor(SuperNode &n){ _Neighbor.push_back(&n); } void add_roadtoit(vector<SuperNode*> &n){ _roadtoit.push_back(n); } int get_id(){ return _id; } int get_alias(){ return _alias; } int get_level(){ return _level; } int get_pos(){ return _pos; } void set_pos(int i){ _pos = i; } SuperNode* get_oneinroad(int row, int col){ return _roadtoit[row][col]; } void set_oneinroad(int row, SuperNode &i){ _roadtoit[row].push_back(&i); } vector<SuperNode*> get_roadtoit(int i){ return _roadtoit[i]; } SuperNode get_neighbor(int i){ return *_Neighbor[i]; } };
Como ven tiene algunos métodos y sus atributos el importante para la pregunta es el
Código C++:
. Que es un vector de punteros que apuntan a unos SuperNodos. Ver original
vector<vector<SuperNode*>> _roadtoit;
En el main inicializo un vector de Nodos, llamado "s";
Código C++:
Ver original
int main(){ n = lectraDedatos(); // lee los datos y lee cuantos nodos hay n vector<SuperNode> s (n); // se crea con un vector con n nodos //aquí va un for muy largo. return 0; }
La cuestión es que cada nodo de s tiene su información y eso, en el _roadtoit él guarda todos los posibles caminos para llegar a ese nodo, con punteros a nodos del vector s.
Dentro del for muy largo, luego de recorre el grafo, adiciono nodos ficticios a s con un pushback (quedando más de n claro). Pero me dí cuenta que como el vector estaba a su maxima capacidad, <vector> muda a otro sector de memoria donde si alcanza y le da una capacidad mayor al size, eso está bien, pero ahora lodos los punteros (cada componente de _roadtoit) que apuntaban a s, quedan apuntando a un lugar de memoria donde ya no hay nada. Cómo puedo evitar eso o bien actualizar a dichos punteros?
Muchas gracias,
--------------ejemplo claro---------------
Código C++:
Ver original
#include <iostream>; #include <vector>; using namespace std; int main() { int i = 0; vector<int> v(10,50); int *p = &v[0]; cout << "Dirección del puntero: " << p << endl; cout << "contenido del puntero: " << *p << endl << endl; v.push_back(100); cout << "Dirección del puntero: " << p << endl; cout << "contenido del puntero: " << *p << endl << endl; int *p2 = &v[0]; cout << "Dirección del puntero 2: " << p2 << endl; cout << "contenido del puntero 2: " << *p2 << endl << endl; cin.get(); return 0; }
El puntero p se pierde una vez se muda vector.