-
뇌를 자극하는 C++ STL 8장) 알고리즘_원소를 수정하는 알고리즘PROGRAMMING/STL 2024. 3. 2. 14:36
평화로운 주말 오후, 요즘 너무 게을러진 것 같아서 반성한다..ㅠㅠ
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
https://m.hanbit.co.kr/store/books/book_view.html?p_code=B5912645820
여기서 소개하는 모든 알고리즘은 모두 덮어쓰기 모드로 작동한다. 알고리즘이 삽입 모드로 동작하려면 insert_iterator를 사용해야 한다.
copy, fill, for_each, transform, generate, swap, merge, replace
1. p = copy(b,e, b2)
v의 [b, e)를 v2의 [b2, b2 + (e-b))로 복사한 뒤 목적지 끝 반환자를 반환한다.
copy_backward(b, e, e2)는 v의 [b, e)를 v2의 [e2 - (e-b), e2)의 순차열에 복사한다.
2. fill(b, e, x)
fill(b, e, x)는 구간 [b, e)을 원소 x로 채우며 fill_n(b, n, x)는 구간 [b, b+n)을 원소 x로 채운다.
3. for_each(b, e, f), transform(b, e, t, f)
구간 [b, e)의 반복자가 p라면 모든 원소에 f(*p)를 적용한다. (그리고 [t, t + (e-b))에 저장한다)
for_each() : 출력(void) 매개변수를 사용(함수로 전달하기 전에 변수를 초기화할 필요가 없어 & 사용)
transform() : 함수의 반환 값을 사용하여 사용자의 함수를 원소에 적용
for_each와 transform의 차이점 : transform 알고리즘은 원본의 순차열의 변화 없이 목적지의 순차열로 저장
transform(b, e, b2,t,f) : 구간 [b, e)의 순차열과 [b2 ,b2+(e-b))의 순차열의 반복자를 p, q라 하면 f(*p, *q)한 값을 순차열 [t, t+(e-b))에 저장
4. generate(b, e, f)
generate(b, e, f)는 구간 [b, e)의 모든 원소를 f()로 채우며, generate_n(b, n,f)는 구간[b, b+n)의 모든 원소를 f()로 채운다.
5. swap(a, b)
swap(a, b)는 a와 b를 교환하고, iter_swap(p, q)는 반복자가 가리키는 *p와 *q를 교환한다. swap_range(b, e, b2)는 구간[b, e)와 구간 [b2, b2+(e-b))의 모든 원소를 교환한다.
6. merge(b, e, b2, e2)
정렬된 구간 [b, e)와 [b2, e2)의 순차열을 합병정렬 한다.
※ 정렬된 구간에서 동작한다는 점에 주의해야 한다
특정 정렬 기준에 의해 정렬된 경우 merge(b, e, b2, e2, 이항 조건자) 알고리즘을 사용할 수 있다.
7. replace(b, e, x, x2)
구간 [b, e)의 x인 원소를 x2로 수정한다. replace_if(b, e, 단항 조건자, x2) 알고리즘을 이용해 구간 [b, e)의 원소 중 f(*p)가 참인 원소를 모두 x2로 변경할 수도 있다. 이렇게 변경된 구간 [b, e)를 복사하고 싶다면 replace_copy(b, e, b2,x, x2)와 replace_copy_if(b,e, b2, 단항 조건자, x2)를 사용하면 된다.
'PROGRAMMING > STL' 카테고리의 다른 글
★연결리스트 LinkedList (0) 2024.03.25 (백준 2110번 공유기 설치 C++) 라이님 블로그 대회 알고리즘 따라잡기 6) 이분탐색 3 (2) 2024.03.22 뇌를 자극하는 C++ STL 8장) 알고리즘_원소를 수정하지 않는 알고리즘 (2) 2024.03.01 뇌를 자극하는 C++ STL 7장) 연관 컨테이너(set, multiset, map, multimap) (0) 2024.02.29 뇌를 자극하는 C++ STL 6장) 시퀀스 컨테이너(vector, deque, list) (2) 2024.02.28