所以现在我正在尝试使用STL实现一个列表,但我仍然坚持要为打印功能做些什么。我已经找到了解决方案,但我很难理解。我也在这个实现中使用迭代器时遇到了一些麻烦。
这是我的代码:
AnyList.h:
class AnyList
{
public:
AnyList();
int getNumOfElem() const;
void insertFront(int data);
void forwardPrint();
private:
list<int> *ptr;
};
AnyList.cpp:
AnyList::AnyList()
{
ptr->begin(); //added
}
int AnyList::getNumOfElem() const
{
return static_cast<int>(ptr->size());
}
void AnyList::insertFront(int data)
{
ptr->push_front(data);
}
void AnyList::forwardPrint()
{
//const list<int> & iter; //removed
list<int>::const_iterator i;
for (i = ptr->begin(); i != ptr->end(); ++i) //changed
{
cout << *i << " ";
cout << endl;
}
}
Main.cpp的
int main()
{
AnyList list1, list2;
list1.insertFront(10);
list1.insertFront(11);
list1.insertFront(12);
list1.insertFront(13);
list1.insertFront(14);
cout << "\nList 1: ";
list1.forwardPrint();
}
非常感谢任何见解。截至目前,我甚至不知道如何测试insertFront函数是否在没有打印功能的情况下工作。
编辑:对代码进行了一些更改并标记了它们。
编辑2:只是要包含说明的屏幕截图,这样就不会对我应该在这里完成的事情感到困惑。
重申 - 项目文件附带AnyList类,其中包含私有成员变量列表* ptr和函数getNumOfElements()作为工作函数的示例。主文件还有很多,但我只是包含了第一部分,如果我正确实现了insertFront和forwardPrint功能,它应该有效。
编辑3:为了进一步澄清我认为我感到困惑的事情,我到处看到的例子都是这样的:
vector<string> SS;
SS.push_back("The number is 10");
SS.push_back("The number is 20");
SS.push_back("The number is 30");
cout << "Loop by index:" << endl;
int ii;
for(ii=0; ii < SS.size(); ii++)
{
cout << SS[ii] << endl;
}
cout << endl << "Constant Iterator:" << endl;
哪个好,但我如何按照说明我应该做的那样实现这样的东西?我尝试的并没有奏效。
答案 0 :(得分:1)
在forwardPrint
函数中,你有这个:
const list<int> & iter;
它定义了一个变量iter
,它不是迭代器(无论名称),而是对列表的引用。这有两个方面是错误的:首先定义一个与实际列表没有关联的变量。其次,您将变量定义为列表中的引用,但不会使其实际引用任何内容。
您应该使用您的成员变量作为列表。像
这样的东西for (i = ptr->begin(); i != ptr->end(); ++i) { ... }
在一个稍微相关的说明中,为什么列表中有指针?你甚至没有初始化的指针?这意味着当你获得构建程序的时候,当你取消引用未初始化的指针时,你将会有未定义的行为,这并没有指向任何有效的指针。
不要使用指针。请改用实际实例。
或者,正如几条评论所指出的,为什么要包括std::list
类?