10

在 Java 中有一个很好的库类 java.util.Stack 实现了 push 和 pop 方法。Objective C中有类似的东西吗?

我发现只有 MutableArray。看起来很奇怪,我必须实现像堆栈这样的基本东西,必须有“NSStack”、“NSQueue”和其他类似的东西。

4

4 回答 4

24

没有人应该忘记 Objective-C 提供了一个非常好的变体:Objective-C++。并且 C++ 标准库提供了您需要的、经过良好测试、调试、稳定且尽可能快的数据结构。最好,他们将与 ARC 完美配合。最好的是,如果您有感觉,您甚至可以在指针__weak或指针之间进行选择。__strong

看看<queue><stack>

也就是说,它NSMutableArray非常适合 stacks: -addObject:-lastObject并且-removeLastObject会以良好的性能很好地完成这项工作。

C++ 可能很冗长。非常冗长。但它也有一些优雅,还有一些非常强大的结构。标准库的某些部分真正闪耀,一旦掌握了外星语法,数据结构就是其中的明珠。无论如何,它可以用一些 typedef 隐藏。

于 2012-06-27T09:26:04.067 回答
12

我在这里有一个堆栈实现。它NSMutableArray用来做肮脏的工作,这真的不是那么糟糕。但是Foundation没有内置任何东西。

于 2012-06-27T08:12:41.317 回答
4

你(和我一样)可能会担心使用 NSMutableArray 的出队性能,因为在出​​队时你必须移除 NSMutableArray 中的第一个对象,而移除会导致数组中所有对象的移位。但是根据我在这里所做的测试,这不是必需的:对于包含 100000 个对象的 NSMutableArray,通过连续删除第一个对象来删除所有对象比连续删除最后一个对象慢 100 毫秒。我还将使用一个 NSMutableArray 与使用两个 NSMutableArray 进行了比较。虽然可以通过使用两个 NSMutableArrays 来避免删除第一个对象,这两个 NSMutableArrays 用作两个堆栈,但双堆栈解决方案实际上更慢。

于 2015-01-03T01:20:20.677 回答
1

据我所知,sdk 中没有堆栈和队列之类的东西。这里
有一个队列实现的例子。

于 2012-06-27T08:13:59.317 回答