>백엔드 개발 >C++ >벡터를 효율적으로 복제하고 벡터 자체에 추가하는 방법은 무엇입니까?

벡터를 효율적으로 복제하고 벡터 자체에 추가하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 01:53:13701검색

How to Efficiently Duplicate and Append a Vector to Itself?

효율적인 벡터 자체 추가

벡터의 내용을 복제하여 벡터 자체에 추가해야 하는 경우를 경험해 보셨나요? 그렇다면 명시적인 루프에 의지하지 않고 우아한 솔루션을 찾고 있을 수 있습니다.

std::Vector::insert가 적합한 후보처럼 보일 수 있지만 반복 버전은 *this를 다음과 같이 사용하면 정의되지 않은 동작을 나타냅니다. 반복자. 또한 std::copy만으로는 분할 오류가 발생할 수 있습니다.

두려워하지 마세요! 두 단계를 포함하는 간단하고 효율적인 접근 방식이 있습니다.

  1. 크기 조정: 중복된 요소를 수용하도록 벡터의 용량을 확장합니다. 이 목적으로 크기 조정이나 예약을 사용할 수 있습니다.
  2. 복사: std::copy_n을 사용하여 원래 요소를 벡터의 새로 할당된 부분으로 전송합니다.

다음은 크기 조정을 사용하는 예입니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.