博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[日常] Go语言圣经-指针对象的方法-bit数组习题
阅读量:5739 次
发布时间:2019-06-18

本文共 2686 字,大约阅读时间需要 8 分钟。

练习6.1: 为bit数组实现下面这些方法

func (*IntSet) Len() int      // return the number of elementsfunc (*IntSet) Remove(x int) // remove x from the set func (*IntSet) Clear() // remove all elements from the set func (*IntSet) Copy() *IntSet // return a copy of the set

 

package mainimport (        "bytes"        "fmt")func main() {        var x, y IntSet        x.Add(1)        x.Add(144)        x.Add(9)        fmt.Println(x.String()) // "{1 9 144}"        y.Add(9)        y.Add(42)        fmt.Println(y.String()) // "{9 42}"        x.UnionWith(&y)        fmt.Println(x.String()) // "{1 9 42 144}"        fmt.Println(x.Len())    // 返回4        //x.Remove(9)         //"{1 42 144}"        z := x.Copy()        x.Clear()        fmt.Println(x.String()) //返回{}        fmt.Println(z.String()) //"{1 9 42 144}"        fmt.Println(x.Has(9), x.Has(123)) // "true false"}// An IntSet is a set of small non-negative integers.// Its zero value represents the empty set.type IntSet struct {        words []uint64}// Has reports whether the set contains the non-negative value x.func (s *IntSet) Has(x int) bool {        word, bit := x/64, uint(x%64)        return word < len(s.words) && s.words[word]&(1<
len("{") { buf.WriteByte(' ') } fmt.Fprintf(&buf, "%d", 64*i+j) } } } buf.WriteByte('}') return buf.String()}/*练习6.1: 为bit数组实现下面这些方法*/func (s *IntSet) Len() int { sum := 0 for _, word := range s.words { for j := 0; j < 64; j++ { if word&(1<
a= a|b 最终实现设置指定位为1func (s *IntSet) Add(x int) { word, bit := x/64, uint(x%64) for word >= len(s.words) { s.words = append(s.words, 0) } s.words[word] |= 1 << bit}//删除集合中的元素//1.异或^ :两个值相同,结果为0;两个值不同结果为1;//2.与&:两个值都是1,结果为1;其他结果为0//3. s.words[word] ^ (1 << bit) 把我指定位的1改成了0//4. a &= b ==> a=a&b 最终实现设置指定位为0func (s *IntSet) Remove(x int) { word, bit := x/64, uint(x%64) s.words[word] &= s.words[word] ^ (1 << bit)}//清空集合//1. 设置每个位都为0//2. 使用异或,把位是1的改成0func (s *IntSet) Clear() { for i, word := range s.words { for j := 0; j < 64; j++ { if word&(1<
<< uint(j) } } }}//copy一个set//编译器判断变量的生命期会超出作用域后,自动在堆上分配func (s *IntSet) Copy() (r *IntSet) { var result IntSet for _, word := range s.words { result.words = append(result.words, word) } return &result}

  

转载于:https://www.cnblogs.com/taoshihan/p/8894127.html

你可能感兴趣的文章
ps6-工具的基础使用
查看>>
灵活运用 SQL SERVER FOR XML PATH
查看>>
es 加磁盘扩容
查看>>
使用Azcopy在Azure上进行HBase的冷热备份还原
查看>>
linux下使用过的命令总结(未整理完)
查看>>
ES6的一些文章
查看>>
时间助理 时之助
查看>>
自定义转场动画
查看>>
英国征召前黑客组建“网络兵团”
查看>>
Silverlight 2.5D RPG游戏“.NET技术”技巧与特效处理:(十二)魔法系统
查看>>
[NPM] Run npm scripts in series
查看>>
vs2013修改书签(vs书签文件位置)
查看>>
PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
查看>>
cvc-complex-type.2.4.c: The matching wildcard...
查看>>
android 读取json数据(遍历JSONObject和JSONArray)
查看>>
pyjamas build AJAX apps in Python (like Google did for Java)
查看>>
<JavaScript语言精粹>-读书笔记(一)
查看>>
NPM教程
查看>>
Java学习笔记(40)——Java集合12之fail-fast
查看>>
Java 的swing.GroupLayout布局管理器的使用方法和实例
查看>>