次のコードを検討してください。
#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;
}
2 番目のループは、要素がセットから取得される順序に影響されます。そのようなプログラムの実行結果が、プログラムの実行ごとに異なる可能性はありますか?
私の知る限り、std::set
要素を内部的に並べ替えます。メモリ内の割り当ては必ずしも増加するアドレスを持つとは限らないため、このプログラムの出力が0 1 2 3 4 5 6 7 8 9
?