더북(TheBook)

string 객체들을 비교할 함수는 람다 표현식으로 정의했고, 첫 문자만 비교한다. 첫 문자만 비교했기 때문에 병합된 리스트는 six”seven” 앞에 온다. 위 코드에서 인수 없는 merge()를 호출했다면 일반 정렬 순서에 따라 seven”six” 앞에 왔을 것이다.

리스트 컨테이너의 splice() 멤버는 여러 가지 오버로드가 있다. splice() 함수는 원자로 받은 리스트의 원소들을 현재 컨테이너의 특정 위치 앞으로 전송한다. 소스 컨테이너에서 원소 하나, 원소들의 범위, 또는 전체 원소를 전송할 수 있다. 다음은 원소 하나를 잇는 예제이다.

std::list<std::string> my_words {“three”, “six”, “eight”};
std::list<std::string> your_words {“seven”, “four”, “nine”};
my_words.splice(++std::begin(my_words), your_words, ++std::begin(your_words));

첫 번째 인수는 대상 컨테이너의 위치를 가리키는 반복자다. 두 번째 인수는 잘라 붙일 원소들의 원본이고, 세 번째 인수는 원본 리스트의 원소를 가리키는 포인터로 이 포인터가 가리키는 원소를 첫 번째 인수가 가리키는 위치 앞에 잘라 붙인다. 실행한 후에 컨테이너의 내용은 다음과 같다.

your_words: “seven,” “nine”
my_words: “three,” “four,” “six,” “eight”

원본 리스트에서 범위로 잘라 붙이고 싶다면 세 번째, 네 번째 인수로 범위를 지정하면 된다.

your_words.splice(++std::begin(your_words), my_words, ++std::begin(my_words), std::end(my_words));
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.