2010-08-12 6 views
0

Est-il possible d'utiliser des vecteurs dans Coca Touch? Si oui, quelle bibliothèque doit être incluse?Vecteurs dans Cocoa Touch/Objective-C

Je suivais un cours d'instruction générale de C sur eux une seule chose nécessaire était de #include <vector>

Mais XCode déclare qu'il n'y a pas un tel fichier ou un répertoire.

Tout pointeur vers une bibliothèque fournissant une telle fonctionnalité est apprécié.

Cordialement ~ DHP

+1

vecteurs sont de C++, et non C. Cela a beaucoup de conséquences. – zneak

+1

'#include ' est C++, pas C. – nmichaels

Répondre

6

I figured it out ... Suivez les 3 étapes ci-dessous:

  1. Déployez le nom de fichier avec .mm
  2. #include "vector"
  3. Utilisez ce code:

std::vector <<int>int> myVector(20); 
instead of just using vector <<int>int> myVector(20); 

Maintenant, vous avez un tout nouveau vecteur C++ fonctionnant dans Objective-C.

+0

en utilisant namespace std; ou en indiquant l'espace de noms avant le vecteur – Stuartsoft

+0

Oui, mais l'utilisation de 'using namespace std;' est souvent considérée comme une mauvaise pratique. – Sohcahtoa82

9

Objective-C est un surensemble de C, et donc tout C travaillera avec eux. Cependant, std::vector est une classe C++, ce qui signifie que le compilateur doit savoir que vous allez utiliser C, Objective-C et code C++ dans votre programme. Vous pouvez le faire en modifiant l'extension de vos fichiers source de .m à .mm. Cependant, si vous êtes encore à l'étape de l'apprentissage d'Objective-C ou C++, essayez de ne pas mélanger trop de C++ avec cela. C++ utilise des "types non-POD" (POD étant "plain old data"), qui sont intrinsèquement incompatibles avec les fonctions qui prennent des arguments variadiques; sous le capot, tous Les appels Objective-C fonctionnent de cette façon, ce qui peut rendre complexe le travail avec les types C++ via les appels Objective-C si vous n'êtes pas sûr de la façon dont tout cela fonctionne. Vous pouvez également utiliser la classe NSMutableArray de Cocoa.

+0

merci pour la bonne réponse. J'ai travaillé avec ObjC pendant un certain temps mais je n'ai jamais eu besoin de passer en C++ (du tout dans la vie, et après avoir passé par Basic/Pascal/Fortran/VB.Net/C#/ObjC et dernièrement Java (comme je suis entrer dans Android) Mais après tout ce que je suis toujours peur de C++ :( BTW, c'est la bibliothèque, je veux jouer avec: http://wiki.secondlife.com/wiki/Color_conversion_scripts Cordialement et encore merci big time –

+1

@dhomes Ce ne sont pas les vecteurs STL, mais plutôt certains objets vectoriels tiers Le langage ne ressemble pas non plus à C. Ce qu'ils utilisent est à peu près équivalent à 'struct vector {float x, y , z;}; 'Et c'est POD, alors n'hésitez pas à le lancer dans les appels Objective-C – zneak

4

que diriez-vous:

struct Vector { float r, x, y, z; }; 
typedef struct Vector Vector; 

CG_INLINE Vector 
VectorMake(CGFloat x, CGFloat y, CGFloat z) 
{ 
    Vector vector; vector.x = x; vector.y = y; vector.z = z;return vector; 
} 
+0

Un vecteur dans la bibliothèque std C++ est un type de tableau, pas un point mathématique dans l'espace comme vous le pensez. – phreakhead