C++ 将静态数组推入std::vector?
我正在努力做到以下几点: 我有:C++ 将静态数组推入std::vector?,c++,arrays,vector,C++,Arrays,Vector,我正在努力做到以下几点: 我有: std::vector<std::vector<GLdouble[2]>> ThreadPts(4); 但编译器说: 错误15错误C2440:“正在初始化”:无法从“const GLdouble[2]”转换为“double[2]”C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector 1211 那我怎么做呢? 我使用VS2008和don;我没有std::array,也
std::vector<std::vector<GLdouble[2]>> ThreadPts(4);
但编译器说:
错误15错误C2440:“正在初始化”:无法从“const GLdouble[2]”转换为“double[2]”C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vector 1211
那我怎么做呢?
我使用VS2008和don;我没有std::array,也没有boost
感谢C样式数组是不可赋值的,因此它不能用作
向量
的值类型
如果使用Visual C++ 2008 SP1,则可以<>代码>包含< /代码>,并使用<代码> STD::Tr1::数组< /代码>p>
即使您不想使用所有Boost,您也应该能够简单地将Boost数组头复制到您的项目中并单独使用它;它不依赖于Boost的许多其他部分,并且它所依赖的那些部分可以很容易地删除。C样式数组是不可赋值的,因此它不能用作
向量的值类型
如果使用Visual C++ 2008 SP1,则可以<>代码>包含< /代码>,并使用<代码> STD::Tr1::数组< /代码>p>
即使您不想使用所有Boost,您也应该能够简单地将Boost数组头复制到您的项目中并单独使用它;它不依赖于Boost的许多其他部分,它所依赖的部分可以很容易地移除。
您可以使用:
您可以使用:
不要使用包含2个成员的原始数组,而是将其包装在结构中,如点:
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);
}
结构点{
GLDouble[2]坐标;
无效设置坐标(GLX双精度,GLY双精度)
{
坐标[0]=x;
coords[1]=y;
}
*考虑在这里添加构造函数和其他方法,
*如果合适的话
*/
};
std::vectorthreadpts(4);
而(步骤--)
{
fx+=dfx;
fy+=dfy;
dfx+=ddfx;
dfy+=ddfy;
ddfx+=dddfx;
ddfy+=dddfy;
p点;
p、 设置坐标(fx,fy);
ThreadPts[currentvector]。向后推(p);
}
它占用的内存量与2元素数组相同,并且比数组更具可读性。与其使用包含2个成员的原始数组,不如将其封装在结构中,就像点一样:
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);
}
结构点{
GLDouble[2]坐标;
无效设置坐标(GLX双精度,GLY双精度)
{
坐标[0]=x;
coords[1]=y;
}
*考虑在这里添加构造函数和其他方法,
*如果合适的话
*/
};
std::vectorthreadpts(4);
而(步骤--)
{
fx+=dfx;
fy+=dfy;
dfx+=ddfx;
dfy+=ddfy;
ddfx+=dddfx;
ddfy+=dddfy;
p点;
p、 设置坐标(fx,fy);
ThreadPts[currentvector]。向后推(p);
}
它占用的内存量与2元素数组相同,并且比数组具有更多可读的语义。您也可以使用std::pair
std::vector<std::vector<std::pair<GLdouble[2],GLdouble[2]> > > ThreadPts(4);
std::vector ThreadPts(4);
您也可以使用std::pair
std::vector<std::vector<std::pair<GLdouble[2],GLdouble[2]> > > ThreadPts(4);
std::vector ThreadPts(4);
同意在某些情况下这可能更具可读性,但是,数组的优点是保证其元素之间没有填充,这在数组必须传递给另一个API(如OpenGL)时非常有用。编辑以反映数组中的包装。同意在某些情况下这可能更具可读性,该数组的优点是保证元素之间不填充,如果数组必须传递到另一个API(如OpenGL),这是有用的。编辑以反映数组中的包封。C++应该考虑咨询C++书籍;如果你还没有一本书,你应该考虑从中获得一本。你应该考虑咨询你的C++书籍;如果你还没有一个,你应该考虑从中得到一个。