template<typename CARD>

void shuffle(CARD deck[], int card_count)

{

    CARD* pool = new CARD[card_count];

    CARD* pool_ptr;

    CARD* pool_last = pool + card_count - 1;

    int count = card_count - 1;

    while(pool[count--] = count, count);

    while(card_count)

    {

        pool_ptr = pool + rand() % card_count--;

        *deck++ = *pool_ptr;

        *pool_ptr = *pool_last--;

    }

    delete[] pool;

}



pool_end 대신 pool_last로 효율을 조금 높였다.


그러나 인자로 변수 card_count 를 받는 주제에 pool 을 만들겠다고 해버려서 동적 할당 -> 속도 시망.