在c++ for循环中创建变量的新实例

creating new instances of a variable in for loop C++

本文关键字:新实例 实例 变量 for c++ 循环 创建      更新时间:2023-10-16

我的一些基础知识有很多漏洞,但这是我的问题。

有一个for循环。它循环通过所有的contourFinder实例(到目前为止工作得很好),但是一旦它试图建立polyline和pathFromContour,我无法找出一种方法来链接轮廓ID (' I ')到新创建的polyline和路径。

void draw(){
for(int i = 0; i < n; i++) {
    //FOR FILLING
    ofPolyline polyline = contourFinder.getPolyline(i);//to convert
    ofPath pathFromContour;//path to be built
    for(int i = 0; i < polyline.getVertices().size(); i++) {
        if(i == 0) {
            pathFromContour.newSubPath();
            pathFromContour.moveTo(polyline.getVertices()[i]);
        } else {
            pathFromContour.lineTo(polyline.getVertices()[i]);
        }
    }
    pathFromContour.close();
    pathFromContour.simplify();
    ofColor pathColor(ofRandom(255),ofRandom(255),ofRandom(255));
    pathFromContour.setFillColor(pathColor);
    pathFromContour.draw();
}
}

正因为如此,我似乎不能区别对待我的路径或折线。有人能解释一下我哪里做错了吗?

谢谢

尝试将内部for循环中的计数器更改为'j'或'k'之类的东西。在外部和内部循环中使用i是不好的做法。

像这样?

void draw(){
    ofPolyline* polylines = new ofPopyline[n];
    ofPath* path = new ofPath[n];
    for(int i = 0; i < n; i++) {
        //FOR FILLING
        ofPolyline& polyline = polylines[i];
        polyline = contourFinder.getPolyline(i);//to convert
        ofPath& pathFromContour = ofPath[i];//path to be built
        for(int j = 0; j < polyline.getVertices().size(); j++) {
            if(j == 0) {
                pathFromContour.newSubPath();
                pathFromContour.moveTo(polyline.getVertices()[j]);
            } else {
                pathFromContour.lineTo(polyline.getVertices()[j]);
            }
        }
        pathFromContour.close();
        pathFromContour.simplify();
        ofColor pathColor(ofRandom(255),ofRandom(255),ofRandom(255));
        pathFromContour.setFillColor(pathColor);
        pathFromContour.draw();
    }
    // free resources if they are no longer needed
    delete[] polylines;
    delete[] path;
}

更新:使用向量的替代变体

void draw(){
    vector<ofPolyline> polylines;
    vector<ofPath> paths;
    for(int i = 0; i < n; i++) {
        //FOR FILLING
        ofPolyline polyline = contourFinder.getPolyline(i);//to convert
        polylines.push_back(polyline);
        ofPath pathFromContour;//path to be built
        for(int j = 0; j < polyline.getVertices().size(); j++) {
            if(j == 0) {
                pathFromContour.newSubPath();
                pathFromContour.moveTo(polyline.getVertices()[j]);
            } else {
                pathFromContour.lineTo(polyline.getVertices()[j]);
            }
        }
        pathFromContour.close();
        pathFromContour.simplify();
        ofColor pathColor(ofRandom(255),ofRandom(255),ofRandom(255));
        pathFromContour.setFillColor(pathColor);
        pathFromContour.draw();
        paths.push_back(pathFromContour);
    }
    // no need to explicitly free the resources
  }