Objective-C中C ++向量与什么有关?

时间:2012-01-21 22:37:49

标签: c++ objective-c vector

我正在从Objective-C转向C ++,我不确定是什么向量。我已经阅读了关于它们的文档,但我并不十分清楚。您如何使用Objective-C类比来解释C ++向量?

6 个答案:

答案 0 :(得分:7)

它们与NSMutableArrays非常相似,但vector是模板类,因此可以为任何(标准模板库兼容)类型实例化。 NSArrays始终保留NSObjects

也就是说,假设您的意思是std::vector

答案 1 :(得分:1)

它们就像NSMutableArrays但可以保存任何数据类型 - 指针与否。但是,每个向量一次只能保持一种类型。同样,因为它是C ++,所以功能较少,例如没有plist加载/保存。

答案 2 :(得分:1)

C ++向量(可能你的意思是std::vector)基本上是NSArray,除了它包含你想要的任何类型(这是模板参数,例如std::vector<int>成立{ {1}} S)。当然,它不执行内存管理(int执行内存管理),因为任意类型都不会保留计数。所以例如NSArray是不合适的(假设Obj-C ++)。

答案 3 :(得分:1)

NSArray是CFArray的包装器。 CFArray可以存储任何数据类型。

我对C ++知之甚少,但听起来CFArray可以做你使用矢量的所有内容吗?创建CFArray时,为其提供CFArrayCallBacks指针,该指针包含特定于所存储数据类型的任何逻辑。

当然,你总是可以将你的Obj-C文件重命名为* .mm,并将C ++混合到你的objective-c。

http://developer.apple.com/library/mac/#documentation/CoreFOundation/Reference/CFArrayRef/Reference/reference.html

答案 4 :(得分:1)

在C ++中,Array基本上只是指向连续数据块的指针---一系列元素。它不提供内置方法或更高的功能。

int intArr[] = {0,1,2,3};

相同
int *intArr = (int *)malloc(4*sizeof(int));
for(int i = 0; i < 4; i++) { intArr[i] = i; }

另一方面,vector(std :: vector)是元素的容器(基本上类似于数组),它还提供了额外的内置方法(参见:http://www.cplusplus.com/reference/stl/vector/),例如

vector<int> intArr;
for(int i = 0; i < 4; i++) { intArr.push_back(i); }
// this yields the same content; i.e. intArr = {0,1,2,3}

数组和向量都可以用于任何类型的对象,int,double,&#39; MySpacePirateWizardClass&#39;矢量的一大优点是内置函数的附加功能,如:

int arrSize = intArr.size();  // vector also includes useful information
int *firstElement = intArr.begin();    // methods for creating pointers to elements
intArr.delete(0);             // modify elements
intArr.insert(0, 2);          // modify vector
// now: intArr = {2,1,2,3}

等等。

当我知道我不会缺少空间(或查看大量数据)时,我总是使用向量,因为它们更方便(即使只是size()方法是足够的理由。)

答案 5 :(得分:0)

将矢量视为高级数组。

如果您不熟悉C ++,此页面将是您最好的朋友: http://www.cplusplus.com/reference/stl/vector/