用于循环和对象命名
For-loop and object naming
我正在制作一个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
的内存问题了。
您的代码基本上是正常的。没有理由担心命名变量p1
、p2
、p3
等。假设您尝试这样做是因为您希望稍后通过变量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);
}
相关文章:
- 使用循环创建类对象
- 如何在C++中循环访问未知对象方法?
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 有没有办法在C++中循环访问对象的不同数据成员
- Pybind11:使用 for 循环使用 OpenMP 访问 python 对象
- 如何在 c++ 中使用 for 循环输出矢量中的所有对象
- 涉及全局对象的循环依赖C++
- c++ 循环访问对象列表并删除对象
- 循环访问对象列表 c++
- 在C++中使用循环创建多个对象
- 我想在 C++ 中使用 for 循环创建类对象
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- 在 While 循环中重用对象的多线程
- C++ 在地图上循环 - 消失的对象
- 基于范围的 for 循环将对象移动到另一个容器中?
- 在游戏循环中创建类对象
- 访问类的 std::vector 与 for 循环中的 custum 类对象
- 如何通过C 中的类对象循环
- C++:外部对象循环引用
- 用对象循环向量