728x90
대부분의 Dest의 Iterator를 받는 알고리즘들(copy(), transform(), 집합 연산 등등) 은 그 컨테이너가 공간 요소를 넣기에 충분한 용량 ( capacity ) 를 확보해야한다.
그렇기 때문에 사이즈를 여유있게 할당한 뒤에 결과에 따라 resize하는 경우가 발생하는데, 이러한 번거로운 작업을 줄여주기 위해 만들어 진 것이 반복자 어댑터(Iterator Adaptor)이다.
3가지 종류가 있고 상황에 맞게 사용하면 됨
- inserter()
- back_inserter()
- front_inserter()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | std::vector<int> vec{ 1,2,3,4,5 }; // resize을 통한 복사 std::vector<int> copyVec_origin; copyVec_origin.resize(vec.size()); std::copy(vec.begin(), vec.end(), copyVec_origin.begin()); // 1. std::inserter() std::vector<int> copyVec1; std::copy(vec.begin(), vec.end(), std::inserter(copyVec1, copyVec1.begin())); // 내부에선 copyVec1.insert(vec.begin(), vec.begin() +1... 이 될 것) // back_inserter과 동일한 결과 -> 1, 2, 3, 4, 5 // 2. std::back_inserter() std::vector<int> copyVec2; std::copy(vec.begin(), vec.end(), std::back_inserter(copyVec2)); // push_back()을 사용해서 1, 2, 3, 4, 5 삽입 // 3. std::front_inserter() // (※front_inserter가 존재하는 구조에서 사용해야함 (vector는 front_inserter가 없음!)) std::list<int> copylist1; std::copy(vec.begin(), vec.end(), std::front_inserter(copylist1)); // 5, 4, 3, 2, 1 -> 내부에선 push_front()를 호출함 | cs |
잘 활용해서 사용해보자
함수 라이브러리
std::inserter - cppreference.com
template< class Container > std::insert_iterator inserter( Container& c, typename Container::iterator i ); (until C++20) (since C++20) inserter is a convenience function template that constructs a std::insert_iterator for the container c and its iterator i
en.cppreference.com
728x90
반응형
'프로그래밍 > C++' 카테고리의 다른 글
C++ std::filesystem::exists() 함수원형 및 사용법 설명 (0) | 2023.08.09 |
---|---|
C++ std::filesystem::path 함수원형 및 사용법 설명 (0) | 2023.08.03 |
[C++] 소수(Prime Number) 효율적으로 구하기 (0) | 2022.12.09 |
[C++] pow, sqrt 함수 정리(제곱, 제곱근, 루트) (0) | 2022.12.09 |
[C++] 유클리드 호제법 (최대공약수, 최소공배수) (0) | 2022.12.09 |
댓글