[[[문제]]] shuffle함수를 이용하여 요소들의 위치를 섞어보자
[[[원리 분석]]]
랜덤 엔진을 사용해서 무작위로 값을 섞는다.
==헤더 파일==
#include <iostream>
#include <numeric>
#include <random>
#include <vector>
#include <print>
==소스 코드==
https://koreatopclass.tistory.com/20 << 랜덤 엔진 참고
https://koreatopclass.tistory.com/18 << iota 참고
올바르게 섞였다.
==함수 구현==
함수 구현을 해보고 싶어졌다. 감이 잘 안오는데...
c++ reference에 있는 샘플 코드를 가져왔다.
1. difference_type diff_t로 설정해준 이유는 iterator의 뺄셈이 가능하도록 하기 위해서다.
그러니까, 특정 iterator의 거리 차이를 구할 수 있도록 difference_type을 재 설정 해준 것이다.
2. swap은 마지막 인덱스부터 처음 인덱스 까지 순서대로 스왑할 기회를 얻는다.
그러니까, vector size가 10이었다면 [i = 9; i > 0; --i] 이렇게 될 것이고
9, 8, 7 ...1까지 모든 요소들이 반드시 스왑된다.
3.first[i]는 시작 주소 + i의 값
4.first[r(i + 1)])는 예를들어 i가 맨 마지막 인덱스인 9였다고 하면 first[r(10)]이 되는데 랜덤 엔진 r(10)의 의미는 0 ~ 9 사이의 랜덤한 값을 뽑아 내는 것. 즉 first[ 0 ~ 9]가 된다.
5.swap(first[i], first[0 ~ i]를 스왑하는 것이다.
원리를 이해하고 나니까 쉽다.
학습 장소: 한국공학대학교 게임공학과 수업
'---C++ 역량 강화--- > STL 공부' 카테고리의 다른 글
class 대신 struct 쓰는 이유 (0) | 2024.05.31 |
---|---|
partition, nth_element, partitial_sort, sort (0) | 2024.05.31 |
default_random_engine, distribute, random_device (0) | 2024.05.31 |
print, format (0) | 2024.05.31 |
iota (0) | 2024.05.31 |