[C con Clase] Redefinir un arreglo dinamico

David fire ddfire en gmail.com
Vie Mayo 29 03:59:36 CEST 2009


Esta clarisimo que tenes toda la razon del mundo cuando se trarta de
caracters.
quice hacerlo un poco mas extensivo para otros tipos de datos.
David

El 28 de mayo de 2009 18:44, Programante <programante en gmail.com> escribió:

> David fire escribió:
> > Hola
> > no se para que haces lo del arreglo dinamico si es para una clase o
> > para un trabajo o por gusto.
> > pero la realidad es que no hay arreglos dinamicos y "hacer" uno
> > copiando y borrando no es lo mejor, el coste en performance es
> > altisimo. cada vez que queres agregar tenes que crear un nuevo arreglo
> > en el heap copiar el viejo y borrar el viejo la parte de copiar es
> > costosa en tiempo de pc.
> > si lo vas a hacer asi al menos crealo con espacio extra.
> >
> > si prefiers hacerlo bien la forma es una lista.
> > con una lista lo que haces es tenes cada elemento apunta al siguiente
> > y el ultimo apunta a null cuando queres agregar un elemento lo pones
> > al final y el que apuntaba a null ahora apunta al nuevo elemento. por
> > una cuestion de velocidad siempre guardas un puntero al al ultimo
> > elemento.
> > y para notener que apuntar al anterior y al siguiente tambien guardas
> > un puntero al primero.
> >
> > aparte de la ventaja de no tener que copiar todo el arreglo podes
> > sacar elementos del medio sin problema o podes agregar en el medio sin
> > tener que copiar todo el arreglo.
> >
> > como lo estas haciendo con C++ podes sobre cargar los [] y el = y etc
> > para recorrerlo como un arreglo como a tu objeto lista.
> >
> > Saludos
> > David
>
> En realidad, como se están usando cadenas en C++, lo mejor (EMHO) sería
> utilizar la clase stl::string, que ya se encarga de todo.
>
> #include <iostream>
>
> #include <string>
>
> using namespace std;
>
> int main(void)
>
> {
>
> int n, i;
> string Caracteres;
>
> cout << "Ingrese: ";
>
> cin >> n;
>
>
> Caracteres.resize(n);
>
> for(i=0; i < n; i++)
>
>  Caracteres[i] = 'a';
>
>
> Caracteres.resize(n + 1);
>
> Caracteres[i] = 'b';
>
> cout << Caracteres << endl;
>
> }
>
>
>
> O si preferimos usar más a fondo las posibilidades de la STL:
>
>
> #include <algorithm>
>
> #include <iostream>
>
> #include <string>
>
> using namespace std;
>
> int main(void)
>
> {
>
> int n, i = 0;
> string Caracteres;
>
> cout << "Ingrese: ";
>
> cin >> n;
>
>
> Caracteres.resize(n);
>
> fill(Caracteres.begin (), Caracteres.end (), 'a');
>
> Caracteres.push_back('b');
>
> cout << Caracteres << endl;
>
>
> }
>
>
> Para este ejemplo se podría simplemente reservar los n+1 al principio,
> pero supongo que es la simplificación de algún otro.
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
(\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090528/6d94351b/attachment.html>


Más información sobre la lista de distribución Cconclase