A lo que voy. Te dejo la función inacabada rellena con el código comentado más una recomendación: cuanto menos código escribas mejor (sin llegar a hacer críptica la solución, hay que sacrificar muchas veces la simplicidad por la claridad). La lógica muchas veces se puede simplificar, y no digo solo operaciones lógicas sino las líneas de código. Muchas veces el código se repite y no nos damos cuenta. Vale la pena perder un poco de tiempo en revisarlo y dejar todo lo que se repita fuera de las estructuras condicionales y reorganizar éstas para que solo toquen los pequeños cambios que se suceden.
Tu solución, supongo que esto te lo ha dado el profesor
Código
void AddToCollection(Collection &col, int element) { // la primera parte de la funcion if (col.elno==0) { col.elements = new int[1]; col.elements[0] = element; } //lo que no esta terminado else { int *temporal; int i; temporal = new int[col.elno + 1]; // Hago que temporal sea un elemento más grande que el actual número de elementos. for(i = 0; i < col.elno; ++i) temporal[i] = col.elements[i]; // Copio todos los elementos del array antiguo al nuevo. temporal[i] = element; // i está actualizada al nuevo último elemento por la forma en que trabaja for, // así que guardo el elemento pasado a la función. delete[] col.elements; // Ahora puedo borrar el arrar antiguo col.elements = temporal; // y hacer que el puntero elements apunte al nuevo array. } col.elno++; // Actualizo elno para indicar que hay un elemento más. }
Ahora la mía:
Se basa en que todo el trabajo es el mismo, menos en una cosa, tanto si no había elementos guardados o si los había.
Obviamente faltan las comprobaciones de seguridad, por si acaso hubiera algún fallo pero no están incluidas por simplicidad y claridad.
Código
void AddToCollection(Collection &col, int element) { int *temporal; int i; temporal = new int[col.elno + 1]; for(i = 0; i < col.elno; ++i) temporal[i] = col.elements[i]; temporal[i] = element; if(col.elno) // Esta es la excepeción que he nombrado. Que es lo mismo a: if(col.elno > 0) delete[] col.elements; col.elements = temporal; col.elno++; }