Azərbaycan dili Bahasa Indonesia Bosanski Català Čeština Dansk Deutsch Eesti English Español Français Galego Hrvatski Italiano Latviešu Lietuvių Magyar Malti Mакедонски Nederlands Norsk Polski Português Português BR Românã Slovenčina Srpski Suomi Svenska Tiếng Việt Türkçe Ελληνικά Български Русский Українська Հայերեն ქართული ენა 中文
Subpage under development, new version coming soon!

Subject: Informáticos

2010-03-17 13:59:16
Señores duda de programacion C++ En un vector dinámico..

vale, el problema lo tengo en que tengo un vector dinámico, declarado de por ejemplo 20 espacios:

ConjuntoDeEnteros::ConjuntoDeEnteros(int v[],int nelementos)
{
vector = new int[numeroelementos-1];
for(int i=0;i < nelementos;i++)
{
vector[i] = v[i];
}
numeroelementos = nelementos;
}

La cosa es que si lleno ese vector de elementos y luego kiero añadir un nuevo elemento, se saldría de rango, por tanto, que solución tengo??
la única que se me ocurre es hacer algo asi(elimino el vector dinamico y creo uno nuevo con una posicion más,primero guardo toda la info en un auxiliar y luego la meto, pero no sé, lo veo mu chano:

bool ConjuntoDeEnteros::incluye(int elemento)
{

if (esta(elemento) == true)
return false;
int vectoraux[numeroelementos];
for(int i=0;i < numeroelementos;i++)
{
vectoraux[i] = vector[i];
}

delete vector;
ConjuntoDeEnteros(vectoraux,numeroelementos+1);
vector[numeroelementos] = elemento;

return true;
}
(edited)
2010-03-17 14:13:31
pues haz una lista enlazada mediante punteros en vez de arrays xD
2010-03-17 14:15:31
eso lo pense, pero loco, eso es un máximo queme ihhh..
La cosa es que es a partir de una practica anterior, que no es en memoria dinamica, y claro, si la paso a listas, tengo ke estar reconstruyendo todo basicamente, si no, no hace falta loco..
simplemente par de modificaciones...

(edited)
2010-03-17 14:17:16
xDDDD hombre no es tan facil como usar arrays pero de ahi a que sea un queme..xD

si no conoces de antemano el tamaño k va a tener como maximo el array tienes k usar memoria dinamica xD
2010-03-17 14:17:41
pues hazlo a lo cutre, que quieres k te diga xDDD
2010-03-17 14:19:01
es ke no sabes que tamaño va a tener, no hay una forma que en el constructor o cuando creo el vector, no le tenga que poner un límite y pueda seguir añadiendo sin problemas?
2010-03-17 14:23:06
eso se llama memoria dinamica xDD, o tambien puedes tomar un tamaño de array enorme xDDDDD pero vamos, seria cutre no lo siguiente xD

tienes que hacerlo en c++ por cojones???
2010-03-17 14:24:03
si os han dicho que cambies a hacerlo con memoria dinamica no tienes mas cojones que usar punteros xD
2010-03-17 14:35:10
exacto, punteros si, pero puedo hacerlo con lista o con vector dinamico, como estoy haciendo..
la cosa es que preferiria no tener que hacerlo con lista, porque tendria ke hacer fleje de cambios y bufffff, es muxo tiempo invertido =((
2010-03-17 15:32:45
hombre si pudiese usar java te apañabas con los arraylist y ya esta xD
2010-03-17 17:39:52
no suelo escribir aqui,pero he leído tu problema elio....lo malo de los vectores dinámicos es que una vez creados no se pueden redimensionar, hay dos soluciones, una la que te comenta davizcocho de utilizar listas enlazadas y la otra sería utilizar un vector de la STL, se trabaja igual con él y cada vez que quisieras añadir un elemento te bastaría con un vector.push_back(elem)

espero que te sirva!

pd: si no quieres cambiar tanto, la forma que planteas arriba es la "solución" más fácil!
(edited)
2010-03-17 18:18:12
eso del push_back es una funcion de libreria o algo? XD

porke eso de STL..

estoy buscando en google, y no sé, no parece muy lioso, pero veo bastantes cosas diferentes..
se puede hacer con memoria dinamica por lo que veo, pero no se hace uso de los operadores delete ni new? xD..
si tienes por ahi algo mas de info o algo..
en ke libreria se contiene y demas.. xD
(edited)
2010-03-17 18:21:43
sisi la STL es la standard template library, si buscas en internet hay muchos manuales con las funciones predefinidas y los tipos de datos que implementan...
2010-03-17 18:25:30
en wikipedia he visto mas o menos el uso, pero hace llamada a #vector, a saber ke hay ahí dentro..
la declaracion esa, es rara..xD( ke sale en wikipedia)

quita el ultimo elemento del vector, pero no quita un elemento que quieras pasarle, uyy =P, si no, hubiera estado planchado jaja
(edited)
2010-03-17 18:59:47
Por cierto, el incluye esta mas mal ke tupac xDDD..
de momento tengo esto:

bool ConjuntoDeEnteros::incluye(int elemento)
{
if (esta(elemento) == true)
return false;
int vectoraux[numeroelementos];
int *pvectoraux,*pelemento;
pvectoraux = new int[numeroelementos+1];
pvectoraux = vectoraux;
for(int i=0;i < numeroelementos;i++)
{
*pvectoraux = *vector;
pvectoraux++;
vector++;
}
// delete pvectoraux;
ConjuntoDeEnteros A(vectoraux,numeroelementos+1);
return true;
}


pero no se si hace lo ke kiero , y weno me suelta un error a la hora de crear el conjunto..
undefined reference to ConjuntoDeEnteros::~ConjuntoDeEnteros()
y la verdad que no se pq dice eso, pq el destructor ni lo tengo declarado ni lo uso =S


creo que me peta en el constructor :S

ConjuntoDeEnteros::ConjuntoDeEnteros(int v[],int nelementos)
{
vector = new int[nelementos];
for(int i=0;i < nelementos;i++)
{
*vector = v[i];
vector++;
}
numeroelementos = nelementos;
}



hago esta llamada por ejemplo y me peta con el mismo error :S

int vectoraux[5];
vectoraux[1]=2;vectoraux[4]=2;vectoraux[3]=2;vectoraux[2]=2;
ConjuntoDeEnteros A(vectoraux,5);

Es decir, esta fallando el constructor, y tengo puestas las librerias y la stdlib.h tmb..
(edited)
2010-03-17 20:26:40
Nah, ke me rindo xD me paso a hacerlo por listas xD