当我以下列方式从结构中创建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;
无法到达这里:
screenPoints_of_slices[0][0].y = -1.0000;
screenPoints_of_slices[0][0].z = -1.0000;
有人可以解释我为什么会这样吗?
答案 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::move
(http://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)
显然是因为你没有在你的载体中放任何东西。向量仍为空,因此您无法引用其中的任何元素。