go 用slice模拟vector功能
2017-02-10 11:43
295 查看
appendVector
a = append(a, b...)
copy
b = append([]T(nil), a...)
b = make([]T, len(a)) copy(b, a)
cut删除一段范围i~j
copy(a[i:], a[j:]) for k, n := len(a) - j + i, len(a); k < n; k++ { a[k] = nil //or the zero value of T } a = a[:len(a) - j + i]
delete删除指定i
copy(a[i:], a[i+1:] a[len(a] - 1] = nil //or zero value of T a = a[:len(a)-1]
expand 在i位置扩展j个位置出来
a = append(a[:i], append(make([]T, j), a[i:]...)...)
extend 在最后扩展j个位置
a = append(a, make([]T, j)...)
insert 在i位置插入
a = append(a[:i], append([]T{x}, a[i:]...)...)
这里创建了一个新的slice,然后拷贝a的后半截到新slice,在拷贝新的slice到a,这里两次拷贝。
下面方法一次拷贝
a = append(a, nil)//or zero value of T copy(a[i+1:], a[i:]) a[i] = x
insertVector 插入vector b
a = append(a[:i], append(b, a[i:]...)...)
pop
x, a = a[len(a)-1], a[:len(a)-1]
push
a = append(a, x)
shift
x, a := a[0], a[i:]
unshift
a = append([]T{x}, a...)
filter
b := a[:0] for _, x := range a { if f(x) { b = append(b, x) } }
reversing
for left, right := 0, len(a) - 1; left < right; left, right = left - 1, right - 1 { a[left], a[right] = a[right], a[left] }
相关文章推荐
- go简单模拟Redis数据库对应{key, value}的存取功能
- L2-020 vector模拟
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- 利用多线程模拟卖票的功能
- 字符串练习4:模拟一个trim功能一致的方法。去除字符串两端的空白
- Android模拟发送按键功能的两种方法
- Go基础系列:Go slice详解
- [置顶] 从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector .
- jQuery实现的模拟弹出窗口功能示例
- 以模板模拟实现Vector容器
- go语言文件正则表达式搜索功能示例
- Android发送模拟按键的方法,以及模拟音量键长按功能的实现。
- 详解 Go 语言中 Map 类型和 Slice 类型的传递
- go递归函数如何传递数组切片slice
- 模拟DVD 实现录入 查看 借出 归还 删除 新增 等功能<分层>
- poj1208 The Blocks Problem,模拟,vector
- 模拟dos下面的Debug下子命令D的功能,显示内存数据的程序
- keil 下模拟u-boot的cmd功能
- Go语言学习笔记(四) [array、slice、map]
- 个人代码库のC#千千静听 - 桌面歌词 (功能模拟)