从结构c ++中初始化2D向量

时间:2015-10-19 18:50:17

标签: c++ vector 2d

当我以下列方式从结构中创建2D矢量时:

struct ScreenCoordinates{      //stores coordinates on screen
    GLdouble x;
    GLdouble y;
    GLdouble z;
};

vector<vector<ScreenCoordinates>> screenPoints_of_slices;

此时我收到错误:

screenPoints_of_slices[0][0].x = -1.0000;

Vector Subsript out of range

无法到达这里:

screenPoints_of_slices[0][0].y = -1.0000;
screenPoints_of_slices[0][0].z = -1.0000;

有人可以解释我为什么会这样吗?

3 个答案:

答案 0 :(得分:3)

问题是vector<vector<ScreenCoordinates>> screenPoints_of_slices没有元素

你应该做

vector<vector<ScreenCoordinates> > screenPoints_of_slices(1, vector<ScreenCoordinates>(1));

基本上,上面的步骤为screenCoordinates的vector的一个元素分配了一个元素的空间。

如果您在定义ScreenCoordinates期间不知道元素的数量,则应该push_back元素。下面显示了相同的片段

vector<ScreenCoordinates> temp_vec;   //inner dim
ScreenCoordinates temp_cord = {0,0,0} // construct object

temp_vec.push_back(temp_cord);
temp_vec.push_back(temp_cord); // I am pushing same elem, but you can push any
temp_vec.push_back(temp_cord);

//Now push this back to the 2d vec
screenPoints_of_slices.push_back(temp_vec);

如果您对上述代码感到满意,请查看std::movehttp://en.cppreference.com/w/cpp/utility/move

答案 1 :(得分:1)

试试这个:

const size_t screenWidth  = 1280;
const size_t screenHeight = 720;
vector<vector<ScreenCoordinates>> screenPoints_of_slices(screenHeight,
                                                         vector<ScreenCoordinates>(screenWidth,
                                                                                   ScreenCoordinates{0, 0, 0}));

这将为您创建一个screenHeight x screenWidth矩阵,并使用{0, 0, 0}初始化其元素(但如果需要,可以省略该部分)。

答案 2 :(得分:0)

显然是因为你没有在你的载体中放任何东西。向量仍为空,因此您无法引用其中的任何元素。