안녕하세요 warehouse입니다.
오늘은 C++ 에서 생성 한 vector 를 마구잡이로 섞는 함수
random_shuffle 에 대해서 알아보려고 합니다.
프로그래밍을 하다보면 vector에 값을 넣는 순서대로 데이터가 저장되어
저장 된 값을 사용할 때 편향성을 갖는 경우가 있습니다.
벡터에 데이터를 쌓아둔 상태에서 사용하고 다시 집어넣는 알고리즘이 있다고 하면,
가장 앞 또는 뒤에있는 데이터가 우선적으로 빠지고, 다시 넣게 될 것입니다.
특별한 구현을 하지 않는다면, 다음 동작에서도 동일하게 동작하겠죠
그런데 여기서 random_shuffle 함수를 이용하면
매 동작마다 꺼내지는 데이터를 섞어 줄 수 있습니다.
이제 코드 예시를 통해 어떻게 동작하는지 봅니다.
테스트 코드
우선 벡터를 하나 만들어 줍니다.
그리고 숫자를 넣어볼게요
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> mybox;
for (int i = 0; i < 10; i++ )
mybox.push_back( i );
for (int i = 0; i < 10; i++ )
{
cout<< i << " ";
}
cout<<endl;
return 0;
}
빌드 후 실행을 해 봅니다.
출력은 다음과 같습니다.
$ ./a.out
0 1 2 3 4 5 6 7 8 9
이제 random_shuffle 을 이용해 숫자를 섞어보겠습니다.
random_shuffle 은 iterator를 사용합니다.
begin, end 를 이용해 정렬 될 영역을 인자로 넣어줍니다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> mybox;
for (int i = 0; i < 10; i++ )
mybox.push_back( i );
for (int i = 0; i < 10; i++ )
{
cout<< mybox[i] << " ";
}
cout<<endl;
random_shuffle(mybox.begin(), mybox.end());
for (int i = 0; i < 10; i++ )
cout<< mybox[i] << " ";
cout<<endl;
return 0;
}
빌드 후 출력을 확인하면 다음과 같습니다.
$ ./a.out
0 1 2 3 4 5 6 7 8 9
6 0 3 5 7 8 4 1 2 9
0 ~ 9 까지 입력 된 vector가 랜덤하게 섞인 결과를 볼 수 있습니다.
'C++ > STL' 카테고리의 다른 글
[C++/STL] std::set 사용방법, 목적 짧은 정리 - 리눅스에서 C++ 개발하기 (0) | 2022.01.27 |
---|---|
[C++] map 에 값을 입력하지 않아도 찾아지는 경우 - map 사용 시 주의사항 (0) | 2021.07.18 |
[C++] vector 값과 함께 초기화 하는 방법 (0) | 2021.07.08 |