Hey, chciałbym stworzyć klasę chyba na wzór listy/stosu czy czegoś tam :), która ma w środku tablicę o stałej długości (tzn. do momentu aż się jej nie zmieni - co z założenia ma być rzadkością), której najnowsze elementy będą dodawane na początku tablicy (tj. ich indeksy mają zaczynać się od 0) a najstarsze na samym końcu tj. mają dążyć do indeksu N-1, gdzie N to długość takiego vectora. Innymi słowy, gdy dojdzie nowy element ostatni tj. z indexem N-1 zostanie usunięty.
Mój wstępny szkielet klasy wygląda następująco:
class MyList
{
public:
MyList()
{
data_array = nullptr;
}
~MyList()
{
delete[] data_array;
}
void resize(unsigned new_size)
{
delete[] data_array;
data_array = new double[new_size]{};
size = new_size;
last_element_index = new_size;
}
void add_new_element(double new_element)
{
if(last_element_index) //jeśli > 0
{
data_array[last_element_index - 1] = new_element;
--last_element_index;
}
else
{
last_element_index = size;
data_array[last_element_index-1] = new_element;
}
}
double& operator[](unsigned i)
{
if(last_element_index < size)
return data_array[last_element_index + i];
else
return data_array[size - last_element_index + i];
}
unsigned& sizee()
{
return size;
}
private:
double* data_array;
unsigned size;
unsigned last_element_index; //size-1
double* ptr_to_last_element; //czy nie lepiej wykorzystać wskaźnik?
};
No i mam pytanie do Was, jak Wam się podoba ten kod i czy to co zrobiłem da się jakoś ulepszyć pod względem wydajności? :-) Fakt, że niby dużo w nim nie ma, ale może byście na coś wpadli :P Dla mnie za dużo jest tu dodawania/odejmowania w tych indexach ;(
Jak w ogóle oceniacie ten kod?
Osobiście zastanawiałem się, czy nie użyć tu jakoś wskaźnika, który by wskazywał na najnowszy/najstarszy element...
Jak Wy byście to zrobili?
Aha i dla pewności chodzi o to, że jak zrobię tak:
MyList my_list;
my_list.resize(4);
my_list.add_new_element(1.0);
my_list.add_new_element(2.0);
my_list.add_new_element(3.0);
to:
my_list[0] powinien być równy 3.0;
my_list[1] powinien być równy 2.0;
my_list[2] powinien być równy 1.0;
Z góry dziękuję za wasze opinie i uwagi!