Namespaces
Variants

std::vector<T,Allocator>:: insert_range

From cppreference.net

template < container-compatible-range < T > R >
constexpr iterator insert_range ( const_iterator pos, R && rg ) ;
(C++23 이후)

rg 의 요소들을 역순 없이 pos 앞에 복사본으로 삽입합니다.

만약 연산 후 새로운 size() 가 기존 capacity() 보다 크다면 재할당이 발생하며, 이 경우 모든 반복자( end() 반복자 포함)와 모든 요소에 대한 참조가 무효화됩니다. 그렇지 않으면 삽입 지점 이전의 반복자와 참조만 유효하게 유지됩니다.

범위 내의 각 반복자는 rg 정확히 한 번 역참조됩니다.

만약 rg * this 와 겹칠 경우, 동작은 정의되지 않습니다.

목차

매개변수

pos - 내용이 삽입될 반복자 앞 위치 ( pos end() 반복자일 수 있음)
rg - 컨테이너 호환 범위 , 즉 요소들이 T 로 변환 가능한 input_range
타입 요구사항
-
다음 조건 중 어느 하나라도 만족되면 동작은 정의되지 않음:

반환값

* this 에 삽입된 첫 번째 요소를 가리키는 반복자, 또는 rg 가 비어 있을 경우 pos 를 반환합니다.

복잡도

다음 조건 중 하나가 충족되면 최대 한 번의 재할당을 수행합니다:

(C++26부터)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) 레인지 인식 생성 및 삽입

예제

#include <algorithm>
#include <cassert>
#include <iterator>
#include <vector>
#include <list>
int main()
{
    auto container = std::vector{1, 2, 3, 4};
    auto pos = std::next(container.begin(), 2);
    assert(*pos == 3);
    const auto rg = std::list{-1, -2, -3};
#ifdef __cpp_lib_containers_ranges
    container.insert_range(pos, rg);
#else
    container.insert(pos, rg.cbegin(), rg.cend());
#endif
    assert(std::ranges::equal(container, std::vector{1, 2, -1, -2, -3, 3, 4}));
}

참고 항목

요소 삽입
(public member function)
요소 범위를 끝에 추가
(public member function)