>백엔드 개발 >C++ >C 스타일 배열에서 `std::벡터`를 효율적으로 초기화하는 방법은 무엇입니까?

C 스타일 배열에서 `std::벡터`를 효율적으로 초기화하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-12 13:37:02249검색

How to Initialize a `std::vector` from a C-style Array Efficiently?

C 스타일 배열에서 std::벡터의 효율적인 초기화

레거시 코드 또는 외부 종속성을 사용하여 작업할 때 다음과 같은 시나리오가 발생할 수 있습니다. 데이터는 C 스타일 배열로 제공됩니다. 이 데이터를 std::벡터와 같은 최신 C 구조에 통합하려면 효율성을 신중하게 고려해야 합니다.

제공된 코드 조각에서 Foo 클래스는 w_라는 std::벡터를 소유합니다. C 스타일 배열(길이 len 포함)로 제공된 데이터로 이 벡터를 채우려면 비용 효율적인 방법이 필요합니다.

과도한 크기 조정 및 복사 방지

w_의 크기를 len으로 조정하고 수동으로 채울 수 있지만 이 접근 방식에는 불필요한 크기 조정과 요소별 복사가 포함됩니다. 마찬가지로 std::copy()를 사용하면 추가 복사 작업이 발생합니다.

포인터 연산 활용

더 효율적인 솔루션은 포인터 연산을 활용하는 것입니다. 포인터는 반복자로 처리될 수 있으므로 [w, w len) 범위를 사용하여 w_를 직접 초기화할 수 있습니다.

w_.assign(w, w + len);

이 구문은 C 스타일 배열 w의 요소 범위를 다음에 할당하여 w_를 초기화합니다. 그것의 끝. std::Vector 클래스는 필요한 메모리를 할당하고 요소를 효율적으로 복사하는 일을 담당합니다.

이 방법을 사용하면 명시적인 크기 조정 및 별도의 복사 작업으로 인한 오버헤드를 방지하여 보다 효율적이고 간결한 접근 방식을 얻을 수 있습니다. .

위 내용은 C 스타일 배열에서 `std::벡터`를 효율적으로 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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