2.5.2 원소 추가하기
push_front() 멤버를 호출해서 리스트의 시작에 원소를 추가할 수 있다. push_back()을 호출해서 리스트의 끝에 원소를 추가할 수 있다. 둘 다 인수는 추가할 객체가 된다.
std::list<std::string> names {“Jane”, “Jim”, “Jules”, “Janet”}; names.push_front(“Ian”); // 리스트의 앞에 string(“Ian”)을 추가 names.push_back(“Kitty”); // 리스트의 끝에 string(“Kitty”)를 추가
두 함수 모두 새 원소를 복제하는 대신 인수를 이동하는 우측값 참조 매개변수 버전이 있다. 우측값 참조 매개변수가 좌측값 참조 매개변수 버전보다 더 효율적이다. 하지만 emplace_front()와 emplace_back() 멤버가 더 효율적으로 동작한다.
names.emplace_front(“Ian”); // 리스트의 앞에 string(“Ian”)을 추가 names.emplace_back(“Kitty”); // 리스트의 끝에 string(“Kitty”)를 추가
두 함수에 사용한 인수는 리스트 내부에서 원소를 생성할 때 호출될 생성자의 인수다. 이들 함수를 이용하면 push_front()와 push_back()의 우측값 버전이 실행하는 이동 연산을 할 필요가 없다.
insert() 함수 멤버를 사용해 리스트 내부에 원소를 추가할 수 있다. insert() 함수는 다른 순차열 컨테이너와 마찬가지로 세 가지 버전이 있다. 첫 번째 버전은 반복자로 지정한 위치에 새 원소를 삽입한다.
std::list<int> data(10, 55); // 리스트의 원소 10개를 값 55로 생성 data.insert(++begin(data), 66); // 두 번째 원소로 66을 삽입