c++ 如何使用函数PrintNodeData()打印“shoppingList”的内容?

v1uwarro  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(144)

给定一个ListItem类,使用内置列表类型完成main(),以创建一个名为shoppingList的链表。程序应该从输入(以-1结尾)读取项目,将每个项目添加到shoppingList,并使用PrintNodeData()函数输出shoppingList中的每个项目。
例如,如果输入为:
milk bread eggs waffles cereal -1
输出为:
milk bread eggs waffles cereal
我的代码:

#include "ListItem.h"
#include <string>
#include <list>
#include <iostream>
#include <iterator>
using namespace std;

int main ()
{
// TODO: Declare a list called shoppingList of type ListItem
list<ListItem>shoppingList;

string item;

// TODO: Read inputs (items) and add them to the shoppingList list
// Read inputs until a -1 is input
do
{
getline(cin, item);
if(item[item.length()-1] == -1)
break;
else
shoppingList.push_back(ListItem(item));
}
while (true);
// TODO: Print the shoppingList list using the PrintNodeData() function
void PrintNodeData();
return 0;
}

列表项.h

#ifndef LISTITEMH
#define LISTITEMH

#include <string>

using namespace std;

class ListItem {
public:
ListItem();

ListItem(string itemInit);

// Print this node
void PrintNodeData();

private:
string item;
};

#endif

列表项目.cpp

#include "ListItem.h"
#include <iostream>

ListItem::ListItem() {
item = "";
}

ListItem::ListItem(string itemInit) {
item = itemInit;
}

// Print this node
void ListItem::PrintNodeData() {
cout << item << endl;

我尝试使用以下语句循环打印每个值:

for( int i = 0; i < static_cast<int>(shoppingList.size()); i++)
shoppingList[i].PrintNodeData;
6vl6ewon

6vl6ewon1#

只需利用C++的range for循环遍历列表即可:

for(auto& listItem : shoppingList)
{
    if(listItem.item != "-1")
    {
        item.PrintNodeData();
    }
}

P.S.既然你是一名学生(这显然是一项作业),那么告诉你放弃using namespace std语句可能是值得的,这是一个非常糟糕的做法,一旦你的项目变得更加复杂,它可能会导致函数别名,只要养成习惯,在你的标准库调用前面加上std::,现在你正在学习,你会更安全

相关问题