C ++에서는 두 개의 list<T>
개체가 A
있고의 B
모든 멤버 B
를 A
. 몇 가지 다른 소스를 검색했지만 간단한 해결책 (ei A.append(B);
)을 찾지 못했고 이것은 저를 약간 놀라게합니다.
이를 수행하는 가장 좋은 방법은 무엇입니까?
그렇게되면 B에 대해서는 신경 쓰지 않습니다 (다음 줄에서 삭제됨). 더 나은 성능을 위해이를 활용할 수있는 방법이 있다면 그것에 관심이 있습니다.
답변:
B 에있는 항목의 사본 을 추가 하려면 다음을 수행 할 수 있습니다.
a.insert(a.end(), b.begin(), b.end());
B의 항목 을 A의 끝 으로 이동 하려면 (동시에 B를 비우기) 다음을 수행 할 수 있습니다.
a.splice(a.end(), b);
귀하의 상황에서 스 플라이 싱은 연결 목록에서 몇 가지 포인터를 조정하는 것만 포함하므로 더 좋을 것입니다.
a.splice(a.end(), b)
및 a.splice(a.end(), b, it_b_start)
에 대해서는 O (1) 이지만에는 O (n)입니다 a.splice(a.end(), b, it_b_start, it_b_end)
.