将静态数组推入std :: vector?

时间:2010-07-07 02:36:28

标签: c++ arrays vector

我正在尝试执行以下操作:

我有:

std::vector<std::vector<GLdouble[2]>> ThreadPts(4);

然后我尝试做:

 GLdouble tmp[2];
  while(step--)
  {


   fx   += dfx;
   fy   += dfy;
   dfx  += ddfx;
   dfy  += ddfy;
   ddfx += dddfx;
   ddfy += dddfy;
   tmp[0] = fx;
   tmp[1] = fy;
   ThreadPts[currentvector].push_back(tmp);
  }

但是编译器说:

错误15错误C2440:'初始化':无法从'const GLdouble [2]'转换为'double [2]'C:\ Program Files \ Microsoft Visual Studio 9.0 \ VC \ include \ vector 1211

那我怎么能这样做? 我正在使用VS 2008而且没有std :: array,我没有提升。

由于

4 个答案:

答案 0 :(得分:2)

C样式数组不可分配,因此不能用作vector的值类型。

如果您使用的是Visual C ++ 2008 SP1,则可以#include <array>并使用std::tr1::array

即使您不想使用所有Boost,您也应该只需将Boost Array标头复制到项目中并自行使用它;它不依赖于Boost的许多其他部分,而且它依赖的部分可以很容易地被删除。

答案 1 :(得分:2)

而不是包含2个成员的原始数组,将其包装在像Point这样的结构中:

struct Point {
   GLDouble[2] coords;

   void setCoordinates(GLDouble x, GLDouble y)
   {
     coords[0] = x;
     coords[1] = y;
   }

   /* consider adding constructor(s) and other methods here,
    * if appropriate
    */
};

std::vector<std::vector<Point>> ThreadPts(4);

while(step--)
{
  fx   += dfx;
  fy   += dfy;
  dfx  += ddfx;
  dfy  += ddfy;
  ddfx += dddfx;
  ddfy += dddfy;

  Point p;
  p.setCoordinates(fx,fy);
  ThreadPts[currentvector].push_back(p);
}

它占用与2元素数组相同的内存量,并且具有比数组更可读的语义。

答案 2 :(得分:0)

您可以使用inserter

std::copy(tmp, tmp+2, std::back_inserter(ThreadPts[currentvector]));

答案 3 :(得分:0)

你也可以使用std :: pair

std::vector<std::vector<std::pair<GLdouble[2],GLdouble[2]> > >  ThreadPts(4);