C의 memset과 동일한 Go
원래 질문:
방법이 있나요? Go에서 이는 C의 memset 함수와 유사하며, 이를 통해 배열을 효율적으로 초기화할 수 있습니다. 0이 아닌 값이 있습니까?
답변:
Go는 표준 라이브러리에서 memset과 직접적으로 동등한 것을 제공하지 않습니다. 그러나 유사한 기능을 달성할 수 있는 여러 접근 방식이 있습니다.
루프 기반 솔루션:
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
이 간단한 루프는 배열을 반복하고 v 값을 할당합니다.
최적화된 솔루션을 활용하여 copy():
Go의 copy() 기능은 고도로 최적화되어 있으며 이러한 목적으로 활용될 수 있습니다.
func memsetRepeat(a []int, v int) { if len(a) == 0 { return } a[0] = v for bp := 1; bp < len(a); bp *= 2 { copy(a[bp:], a[:bp]) } }
이 솔루션은 첫 번째 요소를 수동으로 설정한 다음 반복적으로 복사합니다. 배열의 초기화된 부분을 나머지 요소에 적용합니다.
성능 비교:
벤치마크에 따르면 memsetRepeat 솔루션은 최적화된 copy() 기능으로 인해 더 큰 배열에 대한 루프 기반 접근 방식보다 성능이 뛰어난 것으로 나타났습니다.
요약하자면 Go 프로그래머는 다음 중 하나를 사용할 수 있습니다. 0이 아닌 값으로 배열을 초기화할 때 단순화를 위한 루프 기반 솔루션 또는 향상된 성능을 위한 최적화된 memsetRepeat 솔루션.
위 내용은 C의 memset과 동등한 Go: 0이 아닌 값으로 배열을 효율적으로 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!