欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

c++ map初始化_Go学习每日一问(18)-map元素查找

发布时间:2025/3/8 c/c++ 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c++ map初始化_Go学习每日一问(18)-map元素查找 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下go中的一个知识点:map元素查找

日省吾身

1.下面代码中 A B 两处应该怎么修改才能顺利编译?

func main() { var m map[string]int //A m["a"] = 1 if v := m["b"]; v != nil { //B fmt.Println(v) }}

2.写出下面代码片段的输出结果?

func main() {s := [3]string{"a", "b", "c"}s1 := s[:0]s2 := s[:2]s3 := s[1:2:cap(s)]fmt.Println("s1:", len(s1), cap(s1))fmt.Println("s2:", len(s2), cap(s2))fmt.Println("s3:", len(s3), cap(s3))}

思考后看下方答案…


答疑解惑

参考答案:

1. 原程序编译报错,改进后的程序示例如下:

func main() { // var m map[string]int //A m := make(map[string]int) //A改进 m["a"] = 1 // if v := m["b"]; v != nil { //B if v, ok := m["b"]; ok { //B改进 fmt.Println(v) }

知识点:map

  • 在 A 处,只进行了map的声明,没有分配内存空间,即没有初始化,当前 m 是一个 nil map,不能直接赋值;go中推荐使用内置函数make()或字面量的方式进行map的初始化;
  • 在 B 处,从map中查找一个特定的值,推荐使用改进后的写法; 判断是否找到了特定的值,不需要检查取到的值是否为nil,只需查看第二个返回值ok;它是一个bool型,返回true表示找到了对应的数据;配合 := 操作符,减少代码冗余,看起来清晰易懂;

2. 程序的输出结果为:

s1: 0 3s2: 2 3s3: 1 2

知识点: 切片的创建

  • 基于数组切片,可以使用操作符创建新的切片,形如s[n:l:c],n是偏移的起始位置,l是偏移的长度结束,c是偏移的容量结束位置;l-n 就是新切片的长度, c-n 就是新切片的容量;如果n省略,默认为0
  • 有意思的是,n、l和c并不是当前切片的索引,所以l是可以超出当前切片的长度的,但不能超出当前切片的容量;比如假设oldSlice只有5个元素,但容量是10;newSlice却可以基于oldSlice的前7个元素创建,newSlice中超出oldSlice的部分都会填上0;

以上,你做对了吗?

其他相关答案或补充知识点,欢迎在评论区留言补充!

下期提问

  • 判断下面代码片段的输出结果?
  • func incrementA() int {var n intdefer func() {n++}()return n}func incrementB() (m int) {defer func() {m++}()return m}func main() {fmt.Println(incrementA())fmt.Println(incrementB())}
    • A. 0 0
    • B. 0 1
    • C. 1 0
    • D. 1 1

    答案及解析将在下期文章中给出,欢迎大家在评论区写出你的答案;独乐乐不如众乐乐,欢迎交流学习,互相进步


    欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”。

    总结

    以上是生活随笔为你收集整理的c++ map初始化_Go学习每日一问(18)-map元素查找的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。