벡터 자체 추가를 위한 우아한 솔루션
벡터의 내용을 복제하여 원본 벡터에 추가하는 것은 일반적인 작업입니다. 그러나 루프 없이 이를 효율적으로 구현하는 것은 어려울 수 있습니다.
도전과제 토론
이 질문은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!