Tablica z inkrementowanym rozmiarem. Czy to ma prawo bytu?

0

Witam, czy następujący kod jest poprawny?



#include <iostream>

using namespace std;

int main(int argc, char** argv) {
	int size=1;
	long *arr;
	arr=new long [size];
	arr[0]=2;
	long liczba;
	while(cin>>liczba){
	size++;
	arr[size-1]=liczba;
	cout<<arr[size-1];
}
delete [] arr;
	return 0;
}


Pytanie wynika z faktu, iż kod działą, ale tylko do pewnego momentu. Zwykle dopóki size nie przekroczy 7, 8 lub 9. Później przestaje odpowiadać

1

Twój kod jest zły. Zmienianie wartości zmiennej size nie zmienia rozmiaru tablicy. Rozmiar tablicy w tym kodzie jest stały i wynosi on 1.

0
atmal napisał(a):

Twój kod jest zły. Zmienianie wartości zmiennej size nie zmienia rozmiaru tablicy. Rozmiar tablicy w tym kodzie jest stały i wynosi on 1.

Czy jest więc jakiś sposób na zwiększanie rozmiaru tablicy w trakcie wykonywania programu?

0

Najłatwiej użyć std::vector, tak jak podał @kq.

Chyba że chcesz się bawić jak w C z malloc i realloc.

1

Kod z pierwszego posta to pisanie po pamięci (o ile użytkownik poda jakąkolwiek wartość).
Efekty mogą być różne: od bezbłędnej pracy do wywalenia się w dziwaczny i niepowtarzalny sposób (włącznie ze sformatowaniem dysku).
Jak nie wiesz w co zapakować dane to wybierasz std::vector.
Jak już się trochę rozejrzysz w C++ to możesz poczytać jeszcze o innych klasach: http://www.cplusplus.com/reference/stl/

0

Czy jest więc jakiś sposób na zwiększanie rozmiaru tablicy w trakcie wykonywania programu?

Alokuje się nową tablicę (new[]) o większym rozmiarze, kopiuje dane (copy()) a następnie usuwa starą (delete[]).
Klasa vector zrobi to za ciebie (metoda push_back() dodaje element alokując nową pamięć jeśli trzeba).

Przy czym zwykle nie zwiększa się rozmiaru tablicy za każdym razem o jeden element, bo byłoby to bardzo powolne, tylko rzaczej a o więcej.
Na przykład o 25% dotychczasowego rozmiaru.

1 użytkowników online, w tym zalogowanych: 0, gości: 1