- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一些代码来集成 ODE。这个问题既是对编码建议的请求,也是对解决方案的请求,因此如果您对我即将提供的建议有其他建议,请告诉我!
要由 ODE 积分器积分的“对象”以 6 个“ block ”的形式出现...这样做的原因是我有一个 double 的 std::vector,它们按以下方式排列:
前3个double是位置坐标; x、y 和 z。接下来的 3 个 double 坐标是速度坐标; x、y 和 z。
所以,现在你知道了,我有一个函数,它接受成对的“位置”“”“vector ”“” 作为参数并返回某种结果......看看我在哪里我要接受这个吗?
目前函数需要 2 批位置坐标,方式如下:
std::vector<double> magic_gravity_formula(const std::vector<double> &r1,
const std::vector<double> &r2, const double m1, const double m2)
我不想将 3 组中的所有数据复制到新 vector 中 - 这是一种疯狂(而且非常慢)的编程方式。
我可以改为使用指向原始数据的指针...并只传递一个指向 x 坐标的指针(3 个 double block 中的第一个项目)- 这对我来说似乎没问题,但是也许有更好的方法?有点像 Python 或 Matlab 数组切片?我可以做这样的事情吗?
我有点想传递一个新的 vector (或某种包装类?),它是根据已经存储在数组中的数据创建的……有点像
std::vector<double> sub_section_of_data = data[0..2] // Obviously pseudocode!
好吧,以上是荒谬的,因为大概实现了该语法的语言仍然会进行复制操作,这可能很慢——这正是我试图避免的......
所以是的,我不确定在此处进行的最佳方式 - 谁能提出一个“好的”解决方案? (以非主观的方式!)
编辑:要说清楚 - 问题是我不想做类似的事情:
std::vector<double> r1_temp;
r1_temp.push_back(data[0]); // Copy ! Bad !
r1_temp.push_back(data[1]);
r1_temp.push_back(data[2]);
... same for an r2 ...
std::vector<double> force = magic_gravity_formula(r1, r2, m1, m2);
编辑 2:考虑编译器选项 - 编译器是否会通过以下方式更改函数以接受参数来为我优化我的代码:
std::vector<double> super_gravity_formula(double x1, double y1, double z1, double x2, double y2, double z2, double m1, double m2)
在那种情况下,也许这个问题不重要? (除了形成“让你的代码看起来好读”的观点。)
编辑 3:因此它仍然很重要。
最佳答案
您想查看现有 vector 。
std::experimental::array_view<T>
,或推出您自己的。
数组 View 是一对T*
,以及让您将其视为数组的访问器 operator[]
.begin()
.back()
size()
empty()
等等
Here is one of many such implementations I've rolled .那个有点重,带有range<Iterator>
自适应处理随机访问迭代器的 View ,以及 array_view<T>
继承自 range<T*>
.
如果还不行,搜索“yakk”的SO上的另一个帖子“array_view”或者自己调试。我至少写了六次,或多或少调试,使用不同的 const
正确性规则。
一旦你拥有它,{ vec.data()+index, vec.data()+index+3 }
将构建一个 array_view<double>
开销几乎为零。
关于C++: std::vector - "slice"一个 vector 是可能的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717947/
试图自学,但发现很难找到示例,我的大脑已经陷入了困境。非常不确定 3 和 4,需要帮助才能使 5 正常工作。 package main import "fmt" func main () {
我有一个 slice ,它由字符串类型的 slice 组成。我希望能够为这片 slice 的各个元素赋值,不一定按顺序。然后,稍后,我希望能够更改任何特定元素的值。我已经阅读了有关 slice 的相同
我正在尝试将整数 slice append 到由整数 slice 组成的 slice 。当我打印 slice 时,它按预期显示。但是,当我将 slice append 到一片 slice 时,内容会发
我读了go slice usage and internals和 Slice和 Effective go#slice但是没有像这样用 3 个数字 slice 的方法:slice[a:b:c] 例如这段
这个问题在这里已经有了答案: Are slices passed by value? (5 个答案) 关闭 8 个月前。 如果可能的话,我正在努力使我的代码更具性能以节省内存 我做了一些研究,但找不
我是 Golang 的新手。 当我尝试它时,出现编译错误: cannot use a.B (type []*C) as type []Z in field value 代码: package main
我有数据结构: type PosList []int type InvertedIndex struct { Capacity int Len int IndexList [
我在 Go 中使用矩阵乘法进行一些性能实验并遇到了一些意想不到的结果。 版本 1: func newMatrix(n int) [][]int { m := make([][]int, n)
文档涵盖了 slice() 的 3 种用法对象: obj[:stop] = obj[slice(stop)] obj[start:stop] = obj[slice(start, stop)] obj
我有以下表示网页的结构 type Webpage struct { url.URL references []url.URL } 我想将网站表示为网页的集合。我正在使用这个结构,但感觉
我有一个这样的结构: type Headers struct { header string valueFromCalculation string
我正在参观 Golang 网站,我正在尝试消化其中一个示例。目前还不清楚它是如何工作的: package main import "fmt" func main() { s := []int{
我很好奇解包 slice 并将它们作为参数发送给可变参数函数。 假设我们有一个带有可变参数的函数: func unpack(args ...interface{}) 如果我们不想传入它工作的接口(in
我正在尝试解码来自服务器的 gzip 响应,该响应是一个 msgpack 数组或最终被 gzip 压缩的 msgpack 数组。 为了说明这一点,我的回复看起来像这样: gzip(msgpack([m
我是 Go 编程的新手。我在 Go 编程书籍中读到 slice 由三部分组成:指向数组的指针、长度和容量。 我很困惑: nil slice ( slice 没有可指向的底层数组,len = 0,cap
在Go Programming Language书中,作者给出了append()函数的以下代码示例,该函数接受[]int和int作为参数,并将相应地处理调整大小: // gopl.io/ch4/app
我在代码高尔夫游戏中尝试优化字符串复数时遇到了这个怪癖。我的想法是将字符串写成复数形式,然后使用 substr 有条件地切断最后一个字符: var counter = 1; var myText =
我有一个字符串数组:slice1 [][]string。我使用 for 循环获得了我想要的值: for _, i := range slice1 { //[string1 string2] f
我正在尝试实现一个将 TCP 端口 slice 拆分为 x 个其他 slice 的功能。这些 slice 将发送给将扫描这些端口的工作人员,因此 x 由工作人员的数量设置。 这是代码: // crea
我有以下代码 func Sum(a []int) int { res := 0 for _, n := range a { res += n } ret
我是一名优秀的程序员,十分优秀!