考虑以下代码:
#include <iostream>
int main(int argc, char ** argv) {
std::set<int*> ints;
for (int i = 0; i < 10; i ++) {
int * k = new int(i);
ints.insert(k);
}
for (auto i : ints) {
// some order-sensitive operations, for example:
std::cout << (*i) << " ";
}
return 0;
}
第二个循环对从集合中取出元素的顺序很敏感。这种程序的执行结果是否可能在程序的不同运行中有所不同?
据我所知,在std::set
内部对元素进行排序。由于内存中的分配不一定具有增加的地址,因此该程序的输出可能(尽管不太可能)不是0 1 2 3 4 5 6 7 8 9
?