Det bästa du kan göra är att skapa en std::vector<int> eller någon av dem klasserna, finns nämligen ganska många sådana. Dock kanske du vill lära dig kunna göra en egen sådan, men i den koden du har skrivit finns många fel. Men om du har tur så hinner jag skriva ihop ett lätt exempel senare ikväll.
Hej!
Jag vill ha ett fält som har en dynamisk storlek. Varje gång en ny storlek anges så ska den gamla sparas och ett nytt fält skapas som rymmer den gamla och den nya storleken.
Den jag har gjort hittills ser ni i koden nedan, det är vad jag har tänkt ungefär. Hoppas att någon kan hjälpa mig med den.
#include <iostream>
#include <ctime>
using namespace std;
void fylla_lista(int *&list, int n, int tal);
void expandera_lista( int *&list , int n) ;
void printa_lista ( int *list , int n);
int main()
{
do
{
srand(time(0));
int* vektor= 0;
int antal, n=0;
cout << "Ange vektor storleken: ";
cin >> antal;
vektor= new int[antal];
fylla_lista(vektor, n, antal);
printa_lista ( vektor , antal);
return 0;
}
//Fyller fältet "list" en och en!, talet som skall läggas in är "tal", nuvarande antal heltal i fältet är n st.
void fylla_lista(int *&list, int n, int tal)
{
for (int i = tal; i < tal+n; i++){
list[i]=rand()%35; //fyller i listan själv med slumpade tal
}
char answer;
cout<<"hur många nya tal:"; //om Ja, ta emot det nya talet
cin>>n;
expandera(list,n+antal); //expandera den gamla vektorn med det nya antalet plus det gamla
fylla_lista(vektor, n,antal); //fyll verktorn igen, skicka med det gamla och det nya antalet
//för att skapa plats för det nya utan att skriva över den gamla
cout<<"Vill du fortsätta öka listan?"<<endl;
cin>>answer;
}
while ((answer == 'J') || (answer == 'j'));
}
//För varje anrop skapar denna funktion, ett nytt fält med en position mer än det gamla,
//kopierar innehållet till det nya och tar bort det gamla fältet.
//Väl tillbaka från funktionen, lägger vi in det nya talet, som inte fanns plats för innan!
void expandera_lista( int *&list , int total_antal)
{
list_temp= new int[total_antal];
for(int i=0;i<=antal; i++ ){
list[i]=list_temp[i];
delete list; //deletar innehållet där list pekar på inte själva pekaren
list->list_temp;
kopiera från list till list_temp
//här måste den gamla list deletas föra tt den har kopierats till det nya list_temp
//låt pekaren för list peka på list_temp också för att inte tappa kopplingen
}
}
//Skriver ut innehållet i list.
void printa_lista ( int *list , int n)
{
cout<<"Vektorn innehåller talen: "<<endl;
for (int i = 0; i < n; i++)
cout<<list[i]<<" "<<endl;
}