【发布时间】:2013-04-29 09:21:55
【问题描述】:
我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。
我必须以这种方式声明一个私有二维数组,因为我将在 C++ 函数上使用它:
@implementation MyClass
int myArray[NSFirstDim][NSSecondDim] = 0; <-- Error here
...
- (id)init
{
...
}
...
@end
但我无法以这种方式初始化为 0,因为我收到以下消息:
Array initializer must be an initializer list
如何将所有值初始化为零?
或者我可以使用二维动态数组...
【问题讨论】:
-
使用 std::vector 代替,甚至更好 - std::map。为什么要使用基于 C 的数组?
-
@art-divin:两者都有(可能很大)运行时成本,那么为什么要优先使用其中一个而不是简单的固定大小数组呢?特别是,
map完全不适合,除非可能会减少稀疏数组使用的存储空间。 -
@MikeSeymour 这种决策有很多优点和缺点,但对于更简单的方法,最好使用 std 或 objc 对象来实现。我们可以从这一行“因为我将在 C++ 函数上使用它”在作者只想在 C++ 方法中使用数组的问题中看到,他没有指定他正在尝试达到最大性能(即也在问号下)。
-
@art-divin:在这里使用数组没有任何缺点(至少与 C++ 容器相比;我对 Objective-C 的了解不够多,无法对此发表评论)——声明起来更方便和初始化,同样方便访问,而且效率更高。如果您要另外声明,那么您应该支持该声明,而不仅仅是说使用类在某种程度上是一种“更简单的方法”。
-
@MikeSeymour 很抱歉,我忘了说明在编程风格和未来代码支持的保险方面,这是一种更好的方法
标签: c++ ios objective-c c