Witam.. Jak działają indeksy tablicy? tzn. odwołanie w stylu tablica[Index]
Jak wygląda ich szybkość względem wskaźnika/referencji?
0
0
class MyArray
{
private:
int *array = new int[100];
public:
int operator[] (int index)
{
return *(array + index);
}
};
int main()
{
MyArray a;
cout << a[5] << endl;
}
0
tb[i]
jest tym samym co *(tb+i)
jest tym samym co *(i+tb)
jest tym samym co i[tb]
ten ostatni zapis jest nieco dziwaczny więc rzadko używany.
Generalnie chodzi o to że przed wyłuskaniem *(...)
jest operacja dodawania tb+i
z tego względu, teoretycznie:
for(int i=0;i<N;++i) tb[i]=0;
jest wolniejsze od:
for(int *end=tb+N,*p=tb;p<end;*(p++)=0) {}
ponieważ ma jedno dodawanie mniej.
Jednak w rzeczywistości jest na odwrót, ponieważ w pierwszym przypadku zadziała casheowanie procesora zaś w drugim nie.