벡터의 내용을 복제하여 벡터 자체에 추가해야 하는 경우를 경험해 보셨나요? 그렇다면 명시적인 루프에 의지하지 않고 우아한 솔루션을 찾고 있을 수 있습니다.
std::Vector::insert가 적합한 후보처럼 보일 수 있지만 반복 버전은 *this를 다음과 같이 사용하면 정의되지 않은 동작을 나타냅니다. 반복자. 또한 std::copy만으로는 분할 오류가 발생할 수 있습니다.
두려워하지 마세요! 두 단계를 포함하는 간단하고 효율적인 접근 방식이 있습니다.
다음은 크기 조정을 사용하는 예입니다.
auto old_count = xx.size(); xx.resize(2 * old_count); std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
또는 예약을 활용할 수도 있습니다. std::back_inserter:
auto old_count = xx.size(); xx.reserve(2 * old_count); std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
reserve를 사용할 때 std::copy_n은 필수적입니다. end()가 벡터의 끝을 지나는 지점을 가리키므로 삽입 지점으로 유효하지 않기 때문입니다.
위 솔루션은 결과 벡터에 복제 및 추가된 원본 요소가 포함되도록 보장하여 기존 요소의 무결성을 유지하고 재할당을 최소화합니다. 운영합니다.
위 내용은 벡터를 효율적으로 복제하고 벡터 자체에 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!