gpt4 book ai didi

c++ - C++ STL 的系统级依赖

转载 作者:行者123 更新时间:2023-11-30 01:10:22 27 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我在我的机器上用 g++ cygwin 编译器编译了我的代码,并将它的输出与我从 ideone 得到的输出进行了比较,奇怪的是两者不同。

下面是我的代码:

#include <cstdlib>
#include "queue"
#include "iostream"

using namespace std;

class Student{
private:
int rollNum;
public:
Student(int id):rollNum(id){
}
int getRoll(void){
return rollNum;
}
};


#if 1
int main(int argc, char** argv) {
priority_queue<Student* , vector <Student*> , less<Student*> > pq;
for(int i = 0; i < 10 ; i++){
pq.push(new Student(i));
}
for(; !pq.empty();){
cout << pq.top()->getRoll() << '\n';
pq.pop();
}
return 0;
}
#endif

当我在我的本地系统上运行它时,我得到了输出:8个76个94个5个3个1个2个0

在任何 C++ 编译器版本的 ideone 中执行相同的代码时,我得到输出:98个76个5个4个3个1个2个0

现在我的问题是是否存在任何与系统/操作系统相关的依赖项?因为我无法理解这种行为。

最佳答案

此优先级队列的优先级指定为:

less<Student*>

这样做的目的是比较指向 Student 类的每个实例的指针的原始值。

这是一个完全没有意义的优先级,在不同的平台上会给出不同的结果;并且这甚至不能保证每次程序使用相同的输入集运行时都会给出相同的结果。

所以,是的,当然,这里存在系统/操作系统依赖性。

关于c++ - C++ STL 的系统级依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38041836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com