在c++ for循环中创建变量的新实例
creating new instances of a variable in for loop C++
我的一些基础知识有很多漏洞,但这是我的问题。
有一个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
}
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 根据参数创建派生类的新实例
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- C++ 实例化新对象时不接受继承方法默认参数值
- 实例化新类时未调用的方法
- 在 C++17 中的每个实例化时生成一个新类型
- “auto”每次创建一个新的变量实例
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 我应该始终使用shared_ptr创建类实例(而不是仅仅是新)
- 分割故障 - 遇到问题,创建新的数组实例
- 基于现有实例创建类的新实例
- 从地图访问对象会导致新对象C 的实例化
- 将unordered_map的新实例插入到unordered_map中
- 将新放置到缓冲区后,缓冲区和实例是否具有相同的 void* 地址?
- 如何自动生成结构的新实例
- 自定义容器在保留空间时不必要地创建新元素实例
- char阵列使用新的实例化后显示垃圾
- 是否为类的每个实例实例化了私有类变量
- 是否可以强制新模板实例化
- 为什么在构造函数退出时创建新的实例(对象)