2012-01-21 6 views

答えて

6

これらはかなりNSMutableArraysに似ていますが、vectorはテンプレートクラスであり、任意の(標準テンプレートライブラリ互換)タイプのインスタンス化が可能です。 NSArraysは常にNSObjectsを保持します。

つまり、std::vectorを意味すると仮定します。

1

NSMutableArraysと似ていますが、ポインタはデータ型を保持することも、ポインタを保持することもできません。しかし、各ベクトルは一度に1つのタイプしか保持できません。また、C++のように関数が少なくなっています。 plistの読み書きはありません。それは(テンプレートパラメータである、例えばstd::vector<int>int Sを保持している)したい任意の型を保持している以外

1

A C++ベクトルは(おそらくあなたがstd::vectorのようなものを意味する)、基本的にNSArrayです。もちろん、メモリ管理は行われません(NSArray)。これは、任意の型が保持カウントされないためです。したがって、例えばstd::vector<id>はかなり不適切です(Obj-C++を想定)。

+0

'std :: vector'は実際にあなたのためにメモリ管理を行います(これは' std :: vector'の全体のポイントです)。私はあなたが意図したことは 'std :: vector 'は 'int *'の各要素に対して 'delete'を呼び出さず、その要素の参照カウントもしないということです。スマートポインタを使用して参照カウントサポートを追加することができます。 'std :: vector >'である。 –

+0

@Insilico:Obj-C用語では、「メモリ管理」はObj-Cオブジェクトの参照カウントを意味します。 –

1

にNSArrayはCFArrayのラッパーです。 CFArrayは任意のデータ型を格納できます。

私はC++についてよく分かりませんが、CFArrayはベクターを使用するすべてのことを行うことができますか? CFArrayを作成するときは、CFArrayCallBacksポインタを与えます。このポインタには、格納されるデータ型に固有のロジックが含まれています。

もちろん、Obj-Cファイルの名前を* .mmに変更し、C++を目的に合わせて使用​​することもできます。 Cにおいて

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

+0

私はあなたがそれを後方に持っていると思います。私はObjective-Cを知っていて、C++を学んでいます。 – Marty

+0

ああ、あなたが正しいです、私はそれを後ろに持ってきました。それでも、AFAIKのベクトルはCFArrayと同じですが、実際にはNSArrayと同じではありません。 –

+0

が一般的なコンセンサスのようです。ありがとう! – Marty

1

++配列は、基本的には、データの連続ブロックへのポインタだけ---一連の要素です。それは組み込みのメソッド、またはより高い機能性を提供しません。

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

ベクトル(スタンダード::ベクトル)

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

同じである一方、また、方法に内蔵された付加的なサービスを提供しています(基本的にアレイのような)要素のための容器であります(参照: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、二重、「MySpacePirateWizardClass」等のベクターのビッグボーナスが追加functionalitありますyのような組み込み関数から:

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} 

など

スペースが足りない(または膨大な量のデータを見る)のではないことが分かっているとき、私はいつもベクターを使います。 )。

関連する問題