이제 리스트는 원소 14개를 갖는다. 다음은 원소들의 순차열을 data 리스트에 삽입한다.
std::vector<int> numbers(10, 5); // 값이 5인 원소 10개로 벡터를 생성한다 data.insert(–(–end(data)), cbegin(numbers), cend(numbers));
insert()의 첫 번째 인수는 data 리스트의 끝에서 두 번째 위치를 가리키는 반복자다. 삽입할 numbers 순차열을 insert() 함수의 두 번째, 세 번째 인수로 지정했다. 즉, 벡터의 모든 원소를 리스트에 삽입하고, 삽입 위치는 data 리스트의 끝에서 두 번째 위치이다. 이 코드를 실행한 후에 data의 원소들은 다음과 같다.
55 66 55 55 55 55 55 55 55 88 88 88 5 5 5 5 5 5 5 5 5 5 55 55
이제 list는 원소 24개를 갖는다. numbers의 원소들을 끝에서 두 번째 위치에 삽입했으므로 list의 마지막 원소 2개는 오른쪽으로 밀려난다. 원소들이 밀려나도 마지막 두 원소를 가리키던 반복자나 끝 반복자는 무효화되지 않는다(계속 쓸 수 있다). 리스트 안에 있는 원소를 가리키는 반복자는 반복자가 가리키는 원소가 삭제될 때만 무효화된다(쓸 수 없다).
리스트 안에서 원소를 생성하는 함수는 세 가지가 있다. emplace()는 반복자로 지정한 위치에 원소를 생성한다. emplace_front()는 리스트의 시작, 즉 첫 번째 원소 앞에 원소를 생성하고, emplace_back()은 리스트의 끝, 즉 마지막 원소 뒤에 원소를 생성한다. 이들 함수의 사용법을 보여주는 예제다.
std::list<std::string> names {“Jane”, “Jim”, “Jules”, “Janet”}; names.emplace_back(“Ann”); std::string name(“Alan”); names.emplace_back(std::move(name)); names.emplace_front(“Hugo”); names.emplace(++begin(names), “Hannah”);
코드에서 네 번째 줄은 name에 대한 우측값 참조를 emplace_back() 함수에 전달하기 위해 std::move() 함수를 사용했다. 이 문장들을 실행한 후에 names의 원소는 다음과 같다.
“Hugo” “Hannah” “Jane” “Jim” “Jules” “Janet” “Ann” “Alan”