> 백엔드 개발 > C++ > 루프 없이 효율적으로 벡터 자체를 추가하는 방법은 무엇입니까?

루프 없이 효율적으로 벡터 자체를 추가하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-09 01:23:02
원래의
580명이 탐색했습니다.

How to Efficiently Append a Vector to Itself Without a Loop?

벡터 자체 추가를 위한 우아한 솔루션

벡터의 내용을 복제하여 원본 벡터에 추가하는 것은 일반적인 작업입니다. 그러나 루프 없이 이를 효율적으로 구현하는 것은 어려울 수 있습니다.

도전과제 토론

이 질문은 std::Vector::insert 및 std::copy의 한계를 강조합니다. 이 특정 작업을 위해. std::Vector::insert는 현재 벡터를 참조하기 위해 반복자를 사용하는 것을 금지하고 std::copy는 이 컨텍스트에서 사용될 때 분할 오류를 트리거합니다.

최적의 솔루션

최적의 솔루션은 std::Vector::resize(또는 std::Vector::reserve)를 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::Vector::reserve 및 std::back_inserter:

auto old_count = xx.size();
xx.reserve(2 * old_count);
std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
로그인 후 복사

설명을 사용할 수 있습니다.

std::Vector::resize는 새 크기가 이전 용량을 초과하는 경우 벡터를 재할당합니다. std::copy_n은 벡터의 시작 부분부터 지정된 수의 요소를 새 위치로 복사합니다.

std::Vector::reserve를 사용할 때 end() 반복자가 가리키기 때문에 std::copy_n이 필요합니다. 벡터의 끝을 지나 요소 하나가 있습니다. 이로 인해 삽입이 불가능해집니다.

결론

이 솔루션은 루프 기반에 의존하지 않고 벡터의 내용을 벡터 자체에 추가하는 간결하고 효율적인 방법을 제공합니다. 구현. resize 및 copy_n 작업을 활용하면 최소한의 코드 오버헤드로 원하는 기능을 얻을 수 있습니다.

위 내용은 루프 없이 효율적으로 벡터 자체를 추가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿