c++ - vector 下标超出范围 - 类构造函数初始化中的二维 vector

标签 c++ class vector range subscript

我正在做一个项目,它从底部和侧面输入创建一个等腰三角形。然后我需要计算坐标并以某种可用的方式存储它们。我试图做的是创建一个 2D 顶点 vector - 所以一个 3 个坐标的数组,每个坐标都有一个二维数组(x 和 y 值)。当我尝试访问这些值(例如用于翻译)时,我收到运行时错误: vector 下标超出范围...

代码:

私有(private):

double base, side;
vector<double> coordA, coordB, coordC;
vector<vector<double> > vertex;

公共(public):

isoTri() : base(0), side(0), coordA(0), coordB(0), coordC(0) {}
isoTri(double base_in, double side_in) : base(base_in), side(side_in)
{
    coordA.push_back(0); coordA.push_back(0); //bottom left corner at origin
    coordB.push_back(base2); coordB.push_back(height); //top corner
    coordC.push_back(base); coordC.push_back(0); //bottom right corner
    vector<vector<double> > vertex{ 3 };
    vertex[0] = { coordA }; vertex[1] = { coordB }; vertex[2] = { coordC }; //vector of coordinates
    }
~isoTri() {}

void translate(double dx, double dy){

    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 2; j++){
            vertex[i][0] = vertex[i][0] + dx;
            vertex[j][1] = vertex[j][1] + dy;
        }
    }
}; `

最佳答案

vector<vector<double> > vertex{ 3 }; , 正在声明一个名为 vertex 的新局部变量,与成员变量vertex无关.它仍然是空的。你可以:

isoTri(double base_in, double side_in) : base(base_in), side(side_in)
{
    coordA.push_back(0); coordA.push_back(0); //bottom left corner at origin
    coordB.push_back(base2); coordB.push_back(height); //top corner
    coordC.push_back(base); coordC.push_back(0); //bottom right corner
    vertex.push_back(coordA); 
    vertex.push_back(coordB); 
    vertex.push_back(coordC);
}

关于c++ - vector 下标超出范围 - 类构造函数初始化中的二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164566/

相关文章:

c++ - ShellExecute 中的 cmd 命令

c++ - 为什么 sizeof 表达式不是 2、4、8 等编译时常量?

c++ - 统一初始化中的广义 lambda 捕获无法编译

c++ - CUDA 编译器 (nvcc) 宏

c++ - c++中一行用户输入数组元素的相关问题

C++ 重新散列算法 vector

c++ - 基本成员初始化与在类声明中分配默认值

class - 扩展 Android 应用程序类

javascript - Angular2 模型类中的方法格式

c++ - 用于密集数据集 4D vector 快速范围搜索的数据结构