title: std::vector in objective c method
body: <p>Im working in objective C++. The issue I am stuck with is that I need to pass a std::vector to an objective c method. Is this possible? Below is my current code where I am having to do my calculations on the vector in the vector definition method (adding an offset value to the members of the array) before passing to the method as a C array. Ideally I would like to set the offset values in the second method, thus splitting up the definition (there will be several of these)
  The offset will be variable unlike in the example below.</p>
  
  <p>So instead of passing in (b2Vec2 *)vect i want to use vectors</p>
  
  <pre><code>- (void)createterrain1 {
  
  using namespace std;
  vector&lt;b2Vec2&gt;vecVerts;
  vector&lt;int&gt;::size_type i;
  vecVerts.push_back(b2Vec2(-1022.5f / 100.0, -20.2f / 100.0));
  vecVerts.push_back(b2Vec2(-966.6f / 100.0, -18.0f / 100.0));
  vecVerts.push_back(b2Vec2(-893.8f / 100.0, -10.3f / 100.0));
  vecVerts.push_back(b2Vec2(-888.8f / 100.0, 1.1f / 100.0));
  vecVerts.push_back(b2Vec2(-804.0f / 100.0, 10.3f / 100.0));
  vecVerts.push_back(b2Vec2(-799.7f / 100.0, 5.3f / 100.0));
  vecVerts.push_back(b2Vec2(-795.5f / 100.0, 8.1f / 100.0));
  vecVerts.push_back(b2Vec2(-755.2f/ 100.0, -9.5f / 100.0));
  vecVerts.push_back(b2Vec2(-632.2f / 100.0, 5.3f / 100.0));
  vecVerts.push_back(b2Vec2(-603.9f / 100.0, 17.3f / 100.0));
  vecVerts.push_back(b2Vec2(-536.0f / 100.0, 18.0f / 100.0));
  vecVerts.push_back(b2Vec2(-518.3f / 100.0, 28.6f / 100.0));
  vecVerts.push_back(b2Vec2(-282.1f / 100.0, 13.1f / 100.0));
  vecVerts.push_back(b2Vec2(-258.1f / 100.0, 27.2f / 100.0));
  vecVerts.push_back(b2Vec2(-135.1f / 100.0, 18.7f / 100.0));
  vecVerts.push_back(b2Vec2(9.2f / 100.0, -19.4f / 100.0));
  vecVerts.push_back(b2Vec2(483.0f / 100.0, -18.7f / 100.0));
  vecVerts.push_back(b2Vec2(578.4f / 100.0, 11.0f / 100.0));
  vecVerts.push_back(b2Vec2(733.3f / 100.0, -7.4f / 100.0));
  vecVerts.push_back(b2Vec2(827.3f / 100.0, -1.1f / 100.0));
  vecVerts.push_back(b2Vec2(1006.9f / 100.0, -20.2f / 100.0));
  vecVerts.push_back(b2Vec2(1023.2fdddddd / 100.0, -20.2f / 100.0));
  i = vecVerts.size();
  
  
  //I would like to pass this sets of calculations to the stitch method below rather
   than do it here
  
  vector&lt;b2Vec2&gt;::iterator pos;
  
  //add y offset value to our b2Vec2
  for(pos = vecVerts.begin();pos != vecVerts.end();++pos)
  
  {
      //get b2Vec2 value at index
      b2Vec2 currVert = *pos;
  
      //add y offset (this will come from the sprite image size latterly, set value for testing only
      b2Vec2 addVert = b2Vec2(currVert.x,currVert.y + 40 /PTM_RATIO); 
  
      //copy offset added b2Vec2 back to vector as index
      pos-&gt;b2Vec2::operator=(addVert);
  }
  
  
   //currently using this as kludge to pass my vector to the stitch method
  b2Vec2 * chain = &amp;vecVerts[0];
  [self stitchterrainvertswith:chain num:i];
  </code></pre>
  
  <p>This is my current method passing in my vector as a C styled array</p>
  
  <pre><code>-(void)stitchterrainvertswith:(b2Vec2 *)verts num:(int)num {
  
  
  //create bodydef
  b2BodyDef groundBodyDef;
  
  //set body as static
  groundBodyDef.type = b2_staticBody;
  
  //set body position 
  groundBodyDef.position.Set(0, 0);
  
  //create body using def
  groundBody = world-&gt;CreateBody(&amp;groundBodyDef);
  
  //create shapes
  
  b2EdgeShape screenEdge;
  b2ChainShape terrain;
  
  terrain.CreateChain(verts, num);
    groundBody-&gt;CreateFixture(&amp;terrain,0);
  
  //keeps track of max x value for all the ground pieces that are added to the scene
     //maxVerts.x += totalXVerts.x;
      }
  </code></pre>
  
  <p>I tried using an objc wrapper for std::vector but got kind of lost here is my example:</p>
  
  <pre><code>VecWrap.h
  #import "Box2D.h"
  #include &lt;vector&gt;
  
  struct VecAcc;
  
  @interface VecWrap : NSObject
  {
  struct VecAcc* vec;
  }
  @end
  
  VecWrap.MM
  
  #import "VecWrap.h"
  
  struct VecAcc {
  std::vector&lt;b2Vec2&gt;data;
  };
  
  
  @implementation VecWrap
  
  
  -(id)init 
  {
      vec = 0;
      if (self == [super init]) {
      vec = new VecAcc;
  }
     return self;
  }
  
  -(void)dealloc 
  
  {
  delete vec;
  [super dealloc];
  }
  @end
  </code></pre>
  
  <p>and then created the following method:</p>
  
  <pre><code>-(void)stitchgroundvectswith:(VecAcc*)vecs num:(int)num;
  </code></pre>
  
  <p>Which doesn't work is this even possible?</p>