> 백엔드 개발 > C++ > 루프를 사용하지 않고 벡터 내용을 효율적으로 복제하고 추가할 수 있는 방법은 무엇입니까?

루프를 사용하지 않고 벡터 내용을 효율적으로 복제하고 추가할 수 있는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-28 00:52:12
원래의
660명이 탐색했습니다.

How Can You Efficiently Duplicate and Append Vector Contents Without Using Loops?

효과적인 벡터 콘텐츠 복제 및 추가

벡터 작업 시 요소를 복제하여 콘텐츠 끝에 추가해야 하는 경우가 많습니다. 원본 벡터. 루프를 사용하지 않으면 까다로울 수 있습니다.

반복 솔루션의 과제

std::Vector::insert()와 같은 메서드는 이 작업에 적합하지 않습니다. 삽입하는 동안 벡터가 유효하지 않게 될 수 있습니다.

크기 조정 및 Copy_n

더 세련된 솔루션에는 두 단계가 포함됩니다.

  1. 벡터 크기 조정: resize() 또는 Reserve()를 사용하여 요소 중복.
  2. 요소 복사: 사용 std::copy_n()을 사용하여 원본 요소를 중복 위치에 복사합니다.

다음은 두 가지 구현 예입니다.

// Using resize() and copy_n()
auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);

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

두 경우 모두 원본 벡터의 크기는 두 배가 됩니다. 중복을 수용하기 위해 copy_n() 작업을 사용하여 요소를 전송합니다. end() 반복자는 재할당 후 벡터의 끝을 지나기 때문에 크기를 조정하고 Reserve()를 copy_n()과 함께 사용하기 전에 원래 벡터 크기를 기억하는 것이 중요합니다.

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

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