【发布时间】:2021-07-12 16:57:00
【问题描述】:
我尝试将 C++ 代码转换为 Swift。我有这样一个用 C++ 编写的方法(简化示例)
std::vector<int> list;
void foo() {
...
while(isOk) {
list.resize(10000); //resize do it's job only if list.capasity < requested size
for(int i = 0; i < 10000; i++) {
list[i] = i;
}
}
...
}
Swift 方面:
var arr: [Int] = []
do {
while true {
arr.reserveCapacity(10000)
for i in 0..<10000 {
arr[i] = i
}
}
}
错误是:
错误:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。
根据文档reserveCapacity 分配请求的大小,但是为什么当我尝试向特定单元格写入内容时出现错误?
【问题讨论】:
-
嘿 :) 你能解释一下,为什么你需要这个?特别是因为 Swift 中的数组在大小上是“动态的”。
-
@JasonRietzke 我不知道 swift,但在我看来,数组在 swift 中是动态的正是您想要一种保留容量的方式的原因。动态分配可能会变得昂贵,因此如果您预先知道要分配多少(即使是粗略的),保留内存比让 swift 处理它更有效。
标签: swift