gpt4 book ai didi

c++ - 如何使用 vector 修改结构C++

转载 作者:行者123 更新时间:2023-12-01 14:42:49 25 4
gpt4 key购买 nike

大家好,这段代码是针对咖啡机的。我正在尝试为此机器添加运算符(operator)模式。

#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

struct coffee {
string name;
int itemprice;
string country;
int quantity;

};

float remainder, price2, price;
int main() {
int coffeetype = 1;
cout<<"\nPress'1'for buy a coffee\n";
cout<<"\nPress' 2' for operator mode\n\n";
int input;
cin>>input;
if (input==2)
{
cout << "Welcome to operator mode \n";
cout << "Press '1' for add more coffee powder \n";
cout << "Press '2' for exit\n";
int op;
cin >> op;
if(op==2){
return op;
}
}
coffee drink[] = {
{ "Espresso", 120, "Italy", 20 },
{ "Iced coffee", 150, "France", 20 },
{ "Long black", 80, "Austral", 20 },
{ "Americano", 100, "America", 20 },
{ "Latte", 200, "Italy", 20 },
{ "Irishcoffee",130, "Ireland", 20 },
{ "Cappuccino", 180, "Italy", 20 }
};

cout << fixed;
cout << setprecision(2);

cout<<"Enter the name of coffee";



while(coffeetype != 8){
for (int i = 0; i != sizeof(drink)/sizeof(drink[0]); ++i)
cout<< "\n " << i+1 << ") "<<drink[i].name<<"\t\t"<<drink[i].itemprice<<"\t\t"<<drink[i].country<<"\t\t("<<drink[i].quantity<<") remaining";

我已经为这个结构部分使用了一个 vector 。
vector<coffee> drink {
{ "Espresso", 120, "Italy", 20 },
{ "Iced coffee", 150, "France", 20 },
{ "Long black", 80, "Austral", 20 },
{ "Americano", 100, "America", 20 },
{ "Latte", 200, "Italy", 20 },
{ "Irishcoffee",130, "Ireland", 20 },
{ "Cappuccino", 180, "Italy", 20 }
};

但是使用完这一部分后,我的“for循环”无效了。
有人可以帮我“切除” vector 部分吗?

我也需要您的帮助才能进入运算符(operator)模式。通过运算符(operator)模式,运算符(operator)应该能够添加更多咖啡类型并更改咖啡机中的咖啡数量。下面,我展示了我从stackoverflow的贡献者之一获得的代码。但是我不知道如何在我的代码中实现以下代码部分。
coffee entry;
cin >> entry.country
>> entry.itemprice
>> entry.country
>> entry.quantity;
drink.push_back(entry);

如何使用以上代码修改struct(drink)中的详细信息。

最佳答案

首先,drink是数组名称的不好选择,该数组保存着有关许多酒水的信息,实际上,还有许多基于咖啡的饮料。因此,我们将其称为coffee_drinks

for循环的问题可能是您使用了:

sizeof(drink)/sizeof(drink[0])

此“hack”适用于C样式数组-不适用于 std::vectorsizeof()并不是 std::vector元素的总大小,因为元素的内存是在堆上动态分配的,并且仅由 vector 类实例指向。

您可以只写:
for(int i = 0; i < coffee_drinks.size(); i++)

但更好的是,您可以做到:
for(coffee drink : coffee_drinks)

它遍历 std::vector中的所有元素。该“技巧”适用于具有 begin()end()成员的任何类;它称为 range-based for loop

关于c++ - 如何使用 vector 修改结构C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61982855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com