什么是C++;向量与Objective-C中的向量相关? 我正在从Objto-C到C++,不知道向量是什么。我读过关于它们的文档,但我不太清楚。如何使用Objto-C类比解释C++向量?< P>它们非常类似于代码> nSutababLielix/Cuth>但 vector 是模板类,因此可以被用于任何(标准模板库兼容)类型。代码>NSArrays始终保持NSObjects

什么是C++;向量与Objective-C中的向量相关? 我正在从Objto-C到C++,不知道向量是什么。我读过关于它们的文档,但我不太清楚。如何使用Objto-C类比解释C++向量?< P>它们非常类似于代码> nSutababLielix/Cuth>但 vector 是模板类,因此可以被用于任何(标准模板库兼容)类型。代码>NSArrays始终保持NSObjects,c++,objective-c,vector,C++,Objective C,Vector,也就是说,假设您的意思是std::vector,它们类似于nsmutablearray,但可以保存任何数据类型-指针或非指针。但是,每个向量一次只能保存一种类型。另外,由于C++的功能较少,例如没有PLIST加载/保存。 < P>一个C++向量(大概你指的是“代码> STD::向量< /代码>”,基本上是 NSArray ,除了它拥有你想要的任何类型(这是模板参数,例如 STD::vector < /COD>保存代码> int s)。当然,它不进行内存管理(NSArray就是这样做的),因为不

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

,它们类似于nsmutablearray,但可以保存任何数据类型-指针或非指针。但是,每个向量一次只能保存一种类型。另外,由于C++的功能较少,例如没有PLIST加载/保存。

< P>一个C++向量(大概你指的是“代码> STD::向量< /代码>”,基本上是<代码> NSArray <代码>,除了它拥有你想要的任何类型(这是模板参数,例如<代码> STD::vector < /COD>保存代码> int <代码> s)。当然,它不进行内存管理(NSArray就是这样做的),因为不计算任意类型。因此,例如,一个
std::vector
将是非常不合适的(假设是Obj-C++)。

将vector视为高级数组

如果你是C++新手,这个页面将是你最好的朋友:


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

我不太了解C++,但是听起来好像CFARAL可以做任何你用矢量做的事情?在创建CFArray时,为其指定一个CFArrayCallBacks指针,该指针包含特定于所存储数据类型的任何逻辑

当然,您可以总是将Obj-C文件重命名为*.mm,并将C++与Objy-C.

混合。

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

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

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


当我知道我不会缺少空间(或查看大量数据)时,我总是使用向量,因为它们非常方便(甚至仅使用size()方法就足够了)。

std::vector
实际上为您进行内存管理(这是
std::vector
的全部要点)。我想你的意思是像
std::vector
这样的东西不会对每个
int*
元素调用
delete
,也不会对其元素进行任何引用计数。智能指针可用于添加引用计数支持,例如,
std::vector
@Insilico:在Obj-C术语中,“内存管理”指的是Obj-C对象的引用计数。我想这是反向的。我知道Objto-C,我正在学习C++。哦,你说得对,我确实是向后拿的。不过,矢量与CFArray相同,与NSArray并不完全相同。
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 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}