使用C ++

时间:2016-04-05 09:56:59

标签: c++ list stl linked-list

我正在尝试使用C ++中的列表STL实现循环链​​表。

我完成了圆形链表,但是,有一些我没有得到的要点。因此,我在此页面中发布了问题。

以下是显示循环链表的代码。

list<int> survivors;


for (int i = 1; i <= n; i++) {
    survivors.push_back(i);
}


list<int>::iterator kill = survivors.begin();

int cnt = 0;

while (1) {
    kill = survivors.erase(kill);

    if (kill == survivors.end()) kill = survivors.begin();

尽可能地,我将值推入列表,然后程序进入while循环。 在while循环中,我使用迭代器删除了值,如果当前迭代器到达结尾,那么我将当前迭代器重新分配为前端位置(此代码使列表作为循环链接列表工作)。

无论如何,我的问题是以下代码。

list<int> survivors;


for (int i = 1; i <= n; i++) {
    survivors.push_back(i);
}


list<int>::iterator kill = survivors.begin();

int cnt = 0;

while (1) {
    kill = survivors.erase(kill);

    for (int i = 0; i < k - 1; i++) {
        if (kill == survivors.end()) {
            kill = survivors.begin();
        }
        else {
            kill++;
        }
    }

除了最后一部分,第二个是完全相同的代码。我通过插入for循环和if部分改变了一点。

然而,我的问题是“kill = survivors.begin();”即使迭代器到达列表的末尾,也没有被调用。

我一次又一次地尝试打印出来但我不知道为什么程序不能进入if部分的内部,即使迭代器“kill”到达列表的末尾。

因此,我尝试打印出列表的结尾元素,如下所示。

cout <<*survivors.end()<<endl;

它返回错误消息,说我试图引用未知值。

由于我不太熟悉C ++ STL,所以有人能解决我的问题吗?

0 个答案:

没有答案