当前位置: 首页 > 面试题库 >

Golang附加的大O

骆利
2023-03-14
问题内容

Go内置append函数的复杂性是什么?字符串串联使用+呢?

我想通过附加两个切片(不包括该元素)从切片中删除一个元素。http://play.golang.org/p/RIR5fXq-
Sf

nums := []int{0, 1, 2, 3, 4, 5, 6, 7}
fmt.Println(append(nums[:4], nums[5:]...))

=> [0 1 2 3 5 6 7]

http://golang.org/pkg/builtin/#append表示,如果目的地有足够的容量,则该分片为resliced。我希望“切片”是一个恒定时间的操作。我也希望同样适用于使用的字符串连接+


问题答案:

所有这些都取决于所使用的实际实现,但是我将其基于标准Go和gccgo。

切片

切片意味着更改结构中的整数(切片是具有三个字段的结构:长度,容量和指向后备内存的指针)。

如果分片没有足够的容量,则append将需要分配新的内存并复制旧的内存。对于具有<1024个元素的片,它将使容量加倍;对于具有>
1024个元素的片,它将使容量增加1.25倍。

弦乐

由于字符串是不可变的,因此与每个字符串串联+将创建一个新字符串,这意味着复制旧字符串。因此,如果您要循环执行N次,则将分配N个字符串,并在N次左右复制内存



 类似资料:
  • 问题内容: Go具有出色的图像处理和数据库功能,但是我很难从较小的图像创建一个大图像。有谁知道如何在Golang中提取两个png或jpeg文件并将它们连接起来,形成一个包含两个(或更多)文件的大图像? 我目前正在读取png文件,如下所示: 我对如何获取此png RGBA数据并与其他RGBA数据连接和/或将其组合成“空”图像感到困惑。 问题答案: 创建一个新的空白图像(NewRGBA),其边界的大小

  • 我使用phpmailer发送一个大约5米的大附件,但失败了。这是留言。 致命错误:F:\wamp\www\mail\class中超过了30秒的最大执行时间。smtp。php在线580 时间记忆功能定位 1 0.0010 146208{main}()。。\邮寄。php:0 2 0.0121 533592 smtp_邮件()。。\邮寄。菲律宾比索:65 3 0.0126 539672 PHPMaile

  • 本文向大家介绍Golang加密解密之RSA(附带php),包括了Golang加密解密之RSA(附带php)的使用技巧和注意事项,需要的朋友参考一下 RSA加密算法简史   RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在

  • 问题内容: 我有这个简单的代码: 我期望它可以打印,但是可以打印。这里发生了什么? 问题答案: 这是因为在循环中,您使用 副本 而不是slice / array元素本身进行操作。 将使得它遍历元素的副本,并追加此一时,循环变量的地址- 这是在所有的迭代相同。因此,您将相同的指针添加3次。而且此临时变量将在最后一次迭代(数组的最后一个元素)中设置为,因此这就是为什么您看到该变量打印了3次的原因。 修

  • 问题内容: 我有一个数组,例如我的数据列表为JSON。// 我想结合像2的数组,我试图追加它们。-合并-追加 控制者 Beego(golang)API返回JSON 问题答案: 希望是你想要的

  • 问题是: 我需要对一个大日志文件的每一行应用多个正则表达式(比如几GB长),收集非空匹配并将它们全部放入一个数组中(用于序列化并通过网络发送)。 如果这个问题的答案是正确的,那么切片并没有多大帮助: 如果片没有足够的容量,append将需要分配新内存并复制旧内存。用于切片 因为可以有几十万个正则表达式匹配,所以我无法真正预测一个片段的长度/容量。我也不能让它太大,“以防万一”bc这会浪费内存(或者