在 C++ 中迭代对象的创建

Iterating the creation of objects in C++

我希望能够建造N座摩天大楼。使用输入数据字符串,我想为它们提供 X 和 Y 位置的坐标值。我的主要功能是使用“i”来演示我正在尝试使用输入数据创建尽可能多的摩天大楼。本质上,我想创建 N/3 摩天大楼并将输入分配给每个摩天大楼的坐标。

#include <iostream>
#include <vector>
#include <string>
#include <math.h>

using namespace std;  
vector<int> inputData = {1, 4, 10, 3, 5, 7, 9, 10, 4, 11, 3, 2, 14, 5, 5}; 
int N = inputData.size();

class Buildings{
    public: 
        int yCoordinateLow; 
        int yCoordinateHigh; 
        int xCoordinateLeft; 
        int xCoordinateRight;

}; 

int main(){ 
    for(int i=0; i<N; i=i+3){
        Buildings skyscraper; 
        skyscraper.xCoordianteLeft = inputData.at(i); 
        skyscraper.yCoordianteLow = 0;
        skyscraper.yCoordinateHigh = inputData.at(i+1); 
        skyscraper.xCoordinateRight = inputData.at(i+2); 
    }
    return 0;
}

Jeff Atwood 曾经说过:使用金钱可以买到的最好的工具。而且这些甚至都不贵:Visual Studio 社区版是免费的。这么妥当的IDE会告诉你摩天大楼除了作业没用过

既然你以后可能想对这些摩天大楼做点什么,你应该把它们存放在某个地方,例如在另一个向量中。

int main() {
    vector<Buildings> skyscrapers;
    for (int i = 0; i < N; i = i + 3) {
        Buildings skyscraper{};
        skyscraper.xCoordinateLeft = inputData.at(i);
        skyscraper.yCoordinateLow = 0;
        skyscraper.yCoordinateHigh = inputData.at(i + 1);
        skyscraper.xCoordinateRight = inputData.at(i + 2);
        skyscrapers.push_back(skyscraper);
    }
    return 0;
}

除此之外,只要原始向量中有 N*3 个坐标,循环就可以正常工作。

如果你实现一个游戏,您可能不会将摩天大楼的坐标硬编码在一个向量中,而是可能会从一个文件中读取数据,可能是每个级别。

与其进行所有 error-prone 编码,不如立即初始化摩天大楼

vector<Buildings> skyscrapers = {{1,0,4,10}, {3,0,5,7}, {9,0,10,4}, {11,0,3,4}, {14,0,5,5}};