Przechodzenie tablicy - koncepcja Stride

Uwaga! Informacje na tej stronie mają ponad 5 lat. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

Sun
28
Sep 2008

Jeśli piszemy funkcję, która ma przejść po kolejnych wektorach, to najprościej wydaje się przekazać po prostu tablicę wektorów:

void DoSth(const vec3 Arr[], size_t ArrLen)
{
  for (size_t i = 0; i < ArrLen; i++)
    DoSthWithVec(Arr[i]);
}

Istnieje pewien genialny pomysł, który uczyni tą funkcję bardziej elastyczną. Polega na przekazaniu jej Stride - kroku, mówiącego o ile bajtów trzeba przesuwać wskaźnik:

void DoSth(const void *Data, size_t ArrLen, int Stride)
{
  const char *Bytes = (const char*)Data;
  for (size_t i = 0; i < ArrLen; i++)
  {
    DoSthWithVec( *(const vec3*)Bytes );
    Bytes += Stride;
  }
}

To pozwala m.in.:

To jeden z tych drobnych algorytmów, których niestety nikt nigdzie nie naucza. Każdy musi je gdzieś wypatrzeć przy okazji (albo samemu wymyślić, jeśli ma do tego łeb :)

Comments | #c++ #algorithms Share

Comments

[Download] [Dropbox] [pub] [Mirror] [Privacy policy]
Copyright © 2004-2020