template <class T>struct ChunkArray {... T & operator [] ( size_t index ) { return mChunk[index / COUNT_IN_CHUNK][index % COUNT_IN_CHUNK]; }...// data members vector <T *> mChunk; // вектор указателей на выделенные блоки};
int i, limit = array.size();for (i = 0; i < limit; ++i) while (array[ i ].index != i) Swap(array[ i ], array[array[ i ].index]);