用于循环和对象命名

For-loop and object naming

本文关键字:对象 循环 用于      更新时间:2023-10-16

我正在制作一个for循环,它将从用户那里获得20个输入,然后将输入存储在vector中。我想在for loop中为对象命名20个不同的时间。

现在我有这个:

vector<product*> productdetails;
for (int x = 1; x < 21; x++)
{
    Product*p1 = new product(0, "egrg", "rgdrg");
    cout << "Enter manufacturer for item #"<< x <<": ";
    p1->setmanufacturer();
    cout << "Enter name for item #" << x << ": ";
    p1->setname();
    cout << "Enter id for item #" << x << ": ";
    p1->setID();
    cout << endl;
    productdetails.push_back(p1);
}

如何将p1更改为p(x),以便每次循环结束/开始时,我都有一个新的产品名称?和一开始一样,x将是1,我的第一个产品将是p1。当循环结束,x++,x将变为2,我将得到p2。

您的代码看起来不错。执行push_back时,会生成当前p1值的副本并将其放置在矢量中。因此,在下一次循环迭代中为p1分配一个新值是完全安全的。

但是,如果出于某种(奇怪的)原因想要在主循环中使用x,则可以在向量中预先分配20个元素,然后在循环中使用x对这些元素进行索引。

vector<product*> productdetails(20, nullptr);
for (int x = 0; x < 20; x++)
{
        productdetails[x] = new product(0, "egrg", "rgdrg");
        cout << "Enter manufacturer for item #"<< x <<": ";
        productdetails[x]->setmanufacturer();
        cout << "Enter name for item #" << x << ": ";
        productdetails[x]->setname();
        cout << "Enter id for item #" << x << ": ";
        productdetails[x]->setID();
        cout << endl;
}

另一个考虑因素是:

你真的需要产品的指针吗?

为什么不像这样将产品存储在向量中:

vector<product> productdetails;
for (int x = 0; x < 20; x++)
{
        productdetails.emplace_back(0, "egrg", "rgdrg");  // Constructs a new product
                                                          // at the back of vector

        cout << "Enter manufacturer for item #"<< x <<": ";
        productdetails[x].setmanufacturer();
        cout << "Enter name for item #" << x << ": ";
        productdetails[x].setname();
        cout << "Enter id for item #" << x << ": ";
        productdetails[x].setID();
        cout << endl;
}

那么以后就不需要处理delete的内存问题了。

您的代码基本上是正常的。没有理由担心命名变量p1p2p3等。假设您尝试这样做是因为您希望稍后通过变量p4访问代码中的产品4。但是,如果您的乘积以保证的顺序添加到向量中,您将始终能够通过访问productdetails向量中的第4个索引来访问乘积4。

const size_t MAX_PRODUCTS = 20;
vector<product*> productdetails(MAX_PRODUCTS);
// product ids start from zero since vector indexes start at zero
for (size_t iii = 0; iii < MAX_PRODUCTS; ++iii)
{
    productdetails[iii] = new product(iii, "egrg", "rgdrg");
    cout << "Enter manufacturer for item #"<< iii <<": ";
    productdetails[iii]->setmanufacturer();
    cout << "Enter name for item #" << iii << ": ";
    productdetails[iii]->setname();
    // id is always the same as iii
    cout << endl;
}
// do something with product number 4
productdetails[4]->do_something();

我认为你不能在运行时用C/C++添加变量名,我也不太明白你想做什么,下面的代码有帮助吗?

vector<product*> productdetails(21+1);
for (int x = 1; x < 21; x++)
{
        productdetails[x] = new product(0, "egrg", "rgdrg");
        Product*p1 = productdetails[x];
        cout << "Enter manufacturer for item #"<< x <<": ";
        p1->setmanufacturer();
        cout << "Enter name for item #" << x << ": ";
        p1->setname();
        cout << "Enter id for item #" << x << ": ";
        p1->setID();
        cout << endl;
        productdetails.push_back(p1);
}