在 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模拟(将数组初始化为某个非零值的快速方法)?
2 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
根据这个标题为“优化 memset idiom”的错误,除了循环之外,在 Go 中没有办法做到这一点。该问题已于 2013 年 1 月 9 日通过此帖子关闭
我认为这是固定的。优化非零情况并不是很有趣。
如果人们强烈希望做得更多,我们可以打开另一个错误。
因此,解决方案是使用 icza 已经涵盖的循环。
有bytes.Repeat但也只使用了一个循环:
func Repeat(b []byte, count int) []byte {
nb := make([]byte, len(b)*count)
bp := copy(nb, b)
for bp < len(nb) {
copy(nb[bp:], nb[:bp])
bp *= 2
}
return nb
}
- 2 回答
- 0 关注
- 454 浏览
添加回答
举报
0/150
提交
取消