我的代码是乱序编译的

时间:2018-04-24 04:20:11

标签: c++ linked-list queue

我在Mac上使用g ++来编写作业。任何帮助表示赞赏(这甚至不是作业的家庭作业部分,只是他要求我们完成的问题的设置)。在我的main.cpp中我有

var strToID = {
  "STRING1": () => {
    document.getElementById("TOPIC1").checked = true;
  },
  "STRING2": () => {
    document.getElementById("TOPIC2").checked = true;
  }
}
if(window.location.href.indexOf("STRING1") > -1 && strToID["STRING1"]) {
  strToID["STRING1"]();
}

我正在编译并链接几个文件:g ++ main.cpp queue.cpp -o Queue 但是我的输出是:

Queue test_list;
test_list.add(4);
test_list.add(1);
test_list.add(3);
test_list.add(2);
test_list.remove();
cout << "boop!" << endl; 

我真的不明白为什么代码编译失序 - 不应该把boop放在最后?我也不明白我的教科书中的代码(我在哪里获得添加和删除功能)是如何工作的。我没有看到删除函数是如何重复的,因为它没有循环。 这里他们是供参考:

4
End of test1
boop!
1
End of test1
3
End of test1
2
End of test1

2 个答案:

答案 0 :(得分:1)

编译没问题。

我的猜测是Queue的析构函数为每个剩余项目调用remove方法。

答案 1 :(得分:1)

它是一个队列,正如它的类名和行为所说的那样。什么是队列?将队列视为枪支加载,第一颗子弹进入是第一颗将要熄灭的子弹(FIFO)。

此处add函数正在执行enqueue,remove已出列(加载和触发)。您依次添加4-1-3-2并拨打remove一次。 4,因为第一项将被删除,现在您的队列就像1-3-2。下一次删除调用会将1弹出队列,依此类推。

您与我们分享的输出是正常的,直到boop其他remove来电不在您共享的代码中。可能发生在其他地方(可能是类Queue的析构函数)。