go中是否有memset的模拟?

在 C++ 中,我可以使用memset用一些值初始化一个数组:


const int MAX = 1000000;

int is_prime[MAX]


memset(is_prime, 1, sizeof(is_prime))

memset 所做的,粗略地可以描述为用一些值填充数组,但这样做真的非常快。


在 go 中我可以做is_prime := make([]int, 1000000),但这将创建一个全为 0 的切片,以我可以使用的类似方式new([1000000]int),但没有任何东西允许我创建一个全为 1 或任何其他非零元素的数组/切片。


当然,我可以稍后使用循环用该值填充它,但主要目的memset是它比循环快得多。


那么 Go 程序员是否有memset模拟(将数组初始化为某个非零值的快速方法)?


白猪掌柜的
浏览 455回答 2
2回答

守着一只汪

根据这个标题为“优化 memset idiom”的错误,除了循环之外,在 Go 中没有办法做到这一点。该问题已于 2013 年 1 月 9 日通过此帖子关闭我认为这是固定的。优化非零情况并不是很有趣。如果人们强烈希望做得更多,我们可以打开另一个错误。因此,解决方案是使用 icza 已经涵盖的循环。有bytes.Repeat但也只使用了一个循环:func Repeat(b []byte, count int) []byte {&nbsp; &nbsp; nb := make([]byte, len(b)*count)&nbsp; &nbsp; bp := copy(nb, b)&nbsp; &nbsp; for bp < len(nb) {&nbsp; &nbsp; &nbsp; &nbsp; copy(nb[bp:], nb[:bp])&nbsp; &nbsp; &nbsp; &nbsp; bp *= 2&nbsp; &nbsp; }&nbsp; &nbsp; return nb}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go