我正在制作一个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。
答案 0 :(得分:2)
您的代码似乎很好。当您执行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
- 记忆。
答案 1 :(得分:0)
你的代码大部分都很好。没有理由担心命名变量p1
,p2
,p3
等等。大概是您正在尝试这样做,因为您希望在以后的代码中访问产品4变量p4
。但是,如果您的产品以保证顺序添加到向量中,您将始终能够通过访问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();
答案 2 :(得分:-3)
我认为您不能在运行时使用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);
}