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