티스토리 뷰
Union-Find / 분리집합 알고리즘이나 여러 문제를 풀 때 종종 자기 자신의 index를 값으로 초기화 해야하는 경우가 많다.
우린 그럴때마다 for문을 이용한 방법으로 다음과 같은 코드를 사용한다.
1 2 3 | for (int i = 0; i < n; i++) { par[i] = i; } | cs |
이를 한 방에 처리해주는 함수가 있으니, 이름하여 iota 되시겠다!
1. iota
(※ https://www.cplusplus.com/reference/numeric/iota/ 에서 함수에 대한 정보를 확인할 수 있다.)
C의 Sequence관련 여러 함수들이 담긴 헤더 <numeric.h>에서의 iota 함수는 다음과 같은 구조를 가진다.
void iota (ForwardIterator first, ForwardIterator last, T val)
iota는 3개의 인자를 받는다.
- ForwardIterator first : 배열이나 어떤 container 자료형의 시작부 혹은 포인터
- ForwardIterator last : 배열이나 어떤 container 자료형의 끝부 혹은 포인터
- T val : 하나씩 쌓을 값의 초깃값
구체적으로 이 함수의 역할을 말하자면, 범위 [first, last) 에서 val을 채우고, 이후 ++val연산을 수행한다. 만약 이해가 안된다면, 같은 역할을 하는 코드를 작성하면 다음과 같이 작성할 수 있다.
1 2 3 4 5 6 7 8 | template <class ForwardIterator, class T> void iota (ForwardIterator first, ForwardIterator last, T val) { while (first!=last) { *first = val; ++first; ++val; } } | cs |
쉽게 말해, first부터 last까지 val이 증가하면서 들어간다고 생각하면 된다.
2. 예제 코드
iota함수의 예제 코드를 작성하여 보자.
만약 배열 nums[10]에 숫자 100부터 차례로 증가하며 넣어야 한다고 했을 때, 다음과 같이 작성할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> #include <numeric> using namespace std; int main() { int nums[10]; iota(nums, nums+10, 100); for (int i = 0; i < 10; i++) { cout << nums[i] << ' '; } return 0; } | cs |
이에 대한 실행 결과는 다음과 같다.
1 | 100 101 102 103 104 105 106 107 108 109 | cs |
int형 10개를 저장하는 배열 nums에 차례로 100부터 109까지 들어간 것을 확인할 수 있다.
이처럼 1씩 증가하면서 배열을 초기화하거나 채워야 할 경우 유용하게 사용할 수 있는 함수이다.
하나씩 배열에 접근하기에 시간복잡도는 배열의 길이인 O(n) 을 가지며, 만약 배열의 범위를 초과하여 index에 접근할 경우 undefined behavior 가 발생할 수 있다.
도움이 되었다면 지나가는 길에 하트 하나 눌러주세요, 양질의 글을 쓰는데 하나의 동기부여가 됩니다😍
지적이나 오타 수정 댓글 환영합니다!!
'C++' 카테고리의 다른 글
[C++] 아직도 sum += arr[i] 쓰시나요? accumulate으로 해결하세요! (0) | 2022.04.12 |
---|---|
[C++] 모두 만족하지 않는 지 한번에 검사하는 함수 none_of (0) | 2022.04.12 |
[C++] 배열 안을 한꺼번에 검사하는 손쉬운 방법 all_of (0) | 2022.04.12 |
[C++] 배열 안 원소가 있는지 한번에 확인하는 함수 any_of (0) | 2022.04.12 |
[C++] for문을 Python의 for문처럼 다루어보자. range-based for (0) | 2022.04.12 |
- Total
- Today
- Yesterday
- Network
- CSAPP
- react
- 사칙연산
- BRONZE
- Max
- GDSC
- C
- 문자열
- for
- MIN
- 함수
- 구현
- effective async
- C++
- bomblab
- 제어문
- equal
- 헤더
- 프로그래밍
- 알고리즘
- Proactor
- 수학
- Python
- 시간복잡도
- docker
- 백준
- BOJ
- JS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |