elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Es posible crear un vector de iteradores?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Es posible crear un vector de iteradores?  (Leído 3,365 veces)
Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
¿Es posible crear un vector de iteradores?
« en: 27 Noviembre 2014, 20:03 pm »

Lo mismo la pregunta es tonta, o no, pero en uno de los problemas que estoy trabajando ahora, me piden una función que devuelva (literalmente) un un vector de iteradores

Bueno, la clase vector... estupendo. Vectores de enteros, de caracteres, strings, incluso vectores, tuplas.. no veo problemas.

Pero en ningún lado he podido encontrar documentación (o no la se encontrar) que me diga como narices declaro un vector de iteradores.

Aclaro, que por vector me refiero a un contenedor del tipo:

Código:
#include <vector>
...
int main(){
     vector<int> MiVector; // Declaración de vector de enteros
     vector<int>::iterator MiIterador; // Declaración de un iterador.
}


No tengo claro si realmente puedo hacer algo así, o simplemente el "problema" tiene un gazapo como una catedral. Si se tratara de devolver un vector con las posiciones (para acceder según el método clásico de Dato[indice]) no encontraría mayor problema.


En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #1 en: 27 Noviembre 2014, 21:27 pm »

Hola, que tal un vector de punteros a iteradores?   O mejor dicho un vector de punteros a  Clases.

Me refiero declaras un tipo iterador heredando de la clase iterator. Luego simplemente declaras el vector como puntero a dicha clase.

Saludos.


« Última modificación: 27 Noviembre 2014, 21:41 pm por _Enko » En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #2 en: 27 Noviembre 2014, 21:43 pm »

Urh... ¿puedes extenderte un poco en esa posibilidad?... mas que nada porque de entrada, considero que las conjugaciones de japonés parecen ser mas sencillas  :huh:

Ten en cuenta que ando bastante verde en este tema de los iteradores, tan verde que se podría poner mi foto en la wikipedia como ejemplo de "color verde"
En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #3 en: 27 Noviembre 2014, 21:51 pm »

Mh... años que no programo en cpp  :-[

pero este ejemplo compila xD

Código
  1. class MyIterator : public std::iterator<std::input_iterator_tag, int>
  2. {........
  3. };
  4.  
  5. int main () {
  6.    std::vector<MyIterator> myvector;
  7.  

O bien esto:
Código
  1. typedef std::vector<std::string> strV;
  2.    typedef strV::iterator str_vet_iter;
  3.    std::vector<str_vet_iter> MyVector_Of_String_Iterators;
  4.  
« Última modificación: 27 Noviembre 2014, 22:43 pm por _Enko » En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #4 en: 27 Noviembre 2014, 22:28 pm »

En realidad es mucho lio para reinventar la rueda.

En realidad, planteando el problema desde un punto de vista lógico, no necesitaría en realidad un "vector de punteros", me bastaría con un vector de enteros donde almacenara la distancia entre cada elemento elegido y el inicio del vector, y luego usar un iterador sumándole los diferentes elementos, ya que un iterador permite operaciones de suma con enteros.

Dicho de otro modo, si quiere un vector que almacene "donde están las posiciones que quiero de otro vector", me basta en teoría con un vector de enteros que indique las casillas donde se encuentran los resultados, y acceder a los mismos ya sea mediante la solución "clasica" de "Nombre_de_vector[casilla a acceder]" o calculando la distancia desde la casilla 0 del mismo.

Aprecio la aportación (aunque ahora mismo la verdad es que me pierdo la mitad, pero me lo guardo para cuando llegue a esas cosas), pero la pregunta es otra, si la clase vector puede aceptar como típo para la misma un objeto como un iterador.

Si no puede, entonces simplemente interpreto que la pregunta del problema está mal planteada, y me busco una solución sencilla como la que he comentado.

Vamos, que quiero aprender a andar antes que correr
En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #5 en: 27 Noviembre 2014, 22:37 pm »

Citar
Aprecio la aportación (aunque ahora mismo la verdad es que me pierdo la mitad, pero me lo guardo para cuando llegue a esas cosas), pero la pregunta es otra, si la clase vector puede aceptar como típo para la misma un objeto como un iterador.

Siguiendo tu ejemplo entonces si:

Código
  1. vector<int> MiVector; // Declaración de vector de enteros
  2. typedef vector<int>::iterator MiTipoIterador; // Declaración de un tipo iterador.
  3. vector<MiTipoIterador> MiVectorDeIteradores;
  4.  

Habria que declarar el tipo del iterador y luego crear un vector con ese tipo de iterador.

Aunque la verdad que no soy experto aqui n imucho menos xD

Y no, no necesitas un vector de punteros... cuando te escribí eso estaba pensando en otra cosa. (En un vector de punteros a una clase que si bien tiene que ver aqui, no era lo que necesitabas)

Saludos
« Última modificación: 27 Noviembre 2014, 22:42 pm por _Enko » En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #6 en: 27 Noviembre 2014, 23:04 pm »

Lo probaré a ver que pasa... probar afortunadamente es gratis  ;D

Y no me habré explicado... mi solución es mas "campestre"... simplemente supongamos que tengo un vector, por ejemplo de enteros (en el problema son tuplas, pero eso es irrelevante)

Código:
vector<int>Mi_Vector ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};

Y supongamos que por ejemplo, quiero un "vector de iteradores" que señale a los primos dentro de ese vector.

O bien uso tu solución (a estas horas no... mañana por favor) o simplemente creo otro vector de enteros tal que contenga 1, 3, 5, 7, 11 (en realidad 0, 2, 4, 6, 10)

Luego al iterador que recorrerá ese vector le asigno cero ( Mi_vector.size() ) y le voy sumando el contenido de ese segundo vector.

No obstante... en principio cuela y el compilador no se ha quejado, ya te contaré si consigo hacerlo funcionar, porque estos temas al final pueden interesar a mas gente
En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ¿Es posible crear un vector de iteradores?
« Respuesta #7 en: 27 Noviembre 2014, 23:38 pm »

Creo que ya entiendo lo que necesitas y tu idea esta bien.

Tienes un vector con los elementos  v = (1,2,3,4,5,6,7,8,9,10,11,12...)

Luego simplemente creas otro vector donde guardas el indice de los elementos que necesitas  index = (0,2...)

La otra opcion, sería un vector de punteros a int, y que apunten a los elementos del primer vector mhh. De esa manera no guardarias la posicion dentro del primer vector, sino un puntero directamente al elemento.

Código
  1. vector<int> v;
  2. vector<int*> p;
  3. vector<int> i;
  4.  
  5. int x; //indice
  6.  
  7. i.push_back(x); // agrega la posicion donde se encuentra el elemento dentro del vector V
  8. p.push_back(&v[x]); //agrega puntero al elemento dentro del vector V. Si el elementro cambia, cambia el valor.
  9.  

en el vector i, agregarias 0,2,4,6..
en el vector p, agregarias punetros a 1,3,5,7

En realidad, depende de la utilidad practicamente lo mismo.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Es posible crear esto en vb y PHP
Programación Visual Basic
kakinets 5 1,779 Último mensaje 27 Julio 2005, 19:46 pm
por {_The_Alwar_}
iteradores
Programación C/C++
vazquinhos 1 1,421 Último mensaje 2 Noviembre 2012, 17:19 pm
por do-while
C++ Error al borrar última casilla de un vector con iteradores « 1 2 »
Programación C/C++
Orubatosu 13 7,705 Último mensaje 4 Diciembre 2014, 10:16 am
por Eternal Idol
Problema c++ iteradores
Programación C/C++
Snowden 1 1,404 Último mensaje 18 Febrero 2017, 01:32 am
por ivancea96
Como crear un vector con 3/4 de probabilidad de exito
Programación C/C++
alpachino98 7 2,854 Último mensaje 7 Octubre 2017, 17:32 pm
por alpachino98
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines