C ++创建和打印STL列表(而不是链表)

时间:2016-10-29 20:45:29

标签: c++ list iterator

所以现在我正在尝试使用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:只是要包含说明的屏幕截图,这样就不会对我应该在这里完成的事情感到困惑。

enter image description here

重申 - 项目文件附带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;

哪个好,但我如何按照说明我应该做的那样实现这样的东西?我尝试的并没有奏效。

1 个答案:

答案 0 :(得分:1)

forwardPrint函数中,你有这个:

const list<int> & iter;

它定义了一个变量iter,它不是迭代器(无论名称),而是对列表的引用。这有两个方面是错误的:首先定义一个与实际列表没有关联的变量。其次,您将变量定义为列表中的引用,但不会使其实际引用任何内容。

您应该使用您的成员变量作为列表。像

这样的东西
for (i = ptr->begin(); i != ptr->end(); ++i) { ... }

在一个稍微相关的说明中,为什么列表中有指针?你甚至没有初始化的指针?这意味着当你获得构建程序的时候,当你取消引用未初始化的指针时,你将会有未定义的行为,这并没有指向任何有效的指针。

不要使用指针。请改用实际实例。

或者,正如几条评论所指出的,为什么要包括std::list类?