Jueves 14 de Noviembre de 2024, 04:10
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Stl Vector De Punteros
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Stl Vector De Punteros (Leído 3136 veces)
captaindanieo
Miembro activo
Mensajes: 46
Stl Vector De Punteros
«
en:
Jueves 22 de Noviembre de 2007, 09:34 »
0
Quería utilizar la stl vector, en lugar de un array, para ir almacenando valores conforme voy necesitando, y no tener que usar un array reservando un número de posiciones y eso.
Los vectores, con sus instrucciones push_back, size(), ... son bastante cómodos en ese aspecto.
Si lo que realizo es un vector de una variable normal, por decirlo de alguna manera, como un int, un registro con sus campos, ... no hay problema.
Código: Text
vector <int> mivector;
mivector.push_back(3); //Almacena el valor 3 en el vector
tamaño = mivector.size(); //devuelve el tamaño que tiene actualmente
Cuando quiera acceder a un elemento en concreto de los que tiene almacenado el vector, puedo acceder a ellos mediante:
Código: Text
elemento=mivector[indice];
Pero el problema me surge cuando lo que quiero almacenar en el vector no es una variable de ese tipo, sino que quiero almacenar punteros a una clase que tengo creada.
Mi programa va a ir creando nuevos elementos de dicha clase conforme lo va necesitando, y yo en mi vector quiero almacenar punteros a cada uno de los elementos de tipo clase que haya creado.
Ahora mi variable vector será:
Código: Text
vector <*Tclase> mivector2;
*Tclase elementonuevo; // tendre que ir almacenando punteros a Tclase
mivector2.push_back(elementonuevo);
y para trabajar con los métodos de mi clase, de uno de los elementos que tengo en el vector, tendré que hacer:
Código: Text
mivector2[indice]->metododemiclase(parametro1, parametro2);
¿Es correcto el planteamiento? Es que no termino de tenerlo claro si las definiciones y los accesos a los metodos de la clase se realizarían de esa manera.
Muchisimas gracias de antemano!
Tweet
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Stl Vector De Punteros
«
Respuesta #1 en:
Jueves 22 de Noviembre de 2007, 10:31 »
0
Si, esta bien, misero ejemplo:
Código: Text
class persona
{
public:
int edad;
void say() { cout << edad << endl; }
persona(int num) : edad(num) { }
};
vector <persona*> todos;
todos.push_back(new persona(23));
todos.push_back(new persona(50));
todos.push_back(new persona(40));
for (int x = 0; x < 3; x++) { todos[x]->say(); }
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
captaindanieo
Miembro activo
Mensajes: 46
Re: Stl Vector De Punteros
«
Respuesta #2 en:
Jueves 22 de Noviembre de 2007, 14:43 »
0
Muchísimas gracias de nuevo Eternal Idol, por tu respuesta.
Un saludo.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Stl Vector De Punteros
«
Respuesta #3 en:
Jueves 22 de Noviembre de 2007, 14:47 »
0
De nadas
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
captaindanieo
Miembro activo
Mensajes: 46
Re: Stl Vector De Punteros
«
Respuesta #4 en:
Viernes 30 de Noviembre de 2007, 20:47 »
0
Saludos de nuevo. Iba a abrir un nuevo hilo, pero al tratarse de nuevo de procedimientos con la std vector y estar trabajando dentro de una clase creo que sería mejor postearlo aquí.
Bien. Yo dentro de mi clase, utilizo 2 elementos de tipo vector. Uno de ellos almacena punteros a elementos de otra clase, y el otro almacena simplemente un registro, en cada posición, y digamos que los dos están relacionados, y el segundo vector es como un 'registro' de lo que tengo almacenado en el primer vector (sus identificadores y demas..)
Bueno, el problema me ha surgido cuando he intentado eliminar un elemento del vector. (el elemento ha de ser eliminaod de ambos, y en ambos tengo el problema).
Creo que el problema aparece debido a que estoy utilizando la std vector dentro de una Clase.
La eliminación de un elemento, en un vector, se realizaría de la siguiente forma:
Código: Text
int posicion=5; //por ejemplo
vector<int>::iterator itRemove = arNumbers.begin() + posicion;
arNumbers.erase(itRemove);
El mensaje de error obtenido tras intentar realizar el procedimiento erase, es el siguiente:
Código: Text
conversion from '__gnu_cxx::__normal_iterator<L2capChannel**, std::vector<L2capChannel*, std allocator<L2capChannel*> > >' to non-scalar type '__gnu_cxx::__normal_iterator<int*, std::vector<int,std::allocator<int> > >' requested
no matching function for call to 'std::vector<L2capChannel*,std::allocator<L2capChannel*> > ::erase(__gnu_cxx::__normal_iterator<int*,std::vector<int,std::allocator<int> > >&)'
candidates are: typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >) [with _Tp = L2capChannel*, _Alloc = std::allocator<L2capChannel*>]
note C:\Dev-Cpp\include\c++\3.4.2\bits\vector.tcc:108 typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, __gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >) [with _Tp = L2capChannel*, _Alloc = std::allocator<L2capChannel*>]
¿Que puedo hacer?
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Stl Vector De Punteros
«
Respuesta #5 en:
Viernes 30 de Noviembre de 2007, 21:13 »
0
Si como decis es un vector de una clase tuya entonces el problema esta aca:
vector<
int
>::iterator itRemove = arNumbers.begin() + posicion;
Eso tenes que reemplazarlo por tu clase, siguiendo el ejemplo:
Código: Text
vector<persona*>::iterator itRemove = todos.begin() + posicion;
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
captaindanieo
Miembro activo
Mensajes: 46
Re: Stl Vector De Punteros
«
Respuesta #6 en:
Domingo 2 de Diciembre de 2007, 11:45 »
0
Muchisimas gracias de nuevo EternalIdol.
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
Re: Stl Vector De Punteros
«
Respuesta #7 en:
Domingo 2 de Diciembre de 2007, 13:14 »
0
De nadas, mientras se pueda, aca estamos
Nacional y Popular
En mi país la bandera de Eva es inmortal.
Queremos una Argentina socialmente justa, económicamente libre y políticamente soberana.
¡Perón cumple, Evita dignifica!
La mano invisible del mercado me robo la billetera.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Stl Vector De Punteros