std :: string'ten tamsayıları okumak için istringstreams kullanan çok basit bir test programım var. Kod: Ben bu Solaris 10 üzerinde çalıştırdığınızdaC++ Girdi akışı: Solaris vs Linux'taki işlem sırası
std::map<int, int> imap;
int idx, value;
std::string str("1 2 3 4 5 6 7 8");
istringstream is(str);
while(is >> idx >> imap[idx]){
cout << idx << " " << imap[idx] << endl;
}
cout << endl;
std::map<int, int>::iterator itr;
for(itr = imap.begin(); itr != imap.end(); itr++){
cout << itr->first << " " << itr->second << endl;
}
, aşağıdaki çıktıyı üretir: Ben CentOS 7 altında çalıştırıldığında, Ancak
1 2
3 4
5 6
7 8
1 2
3 4
5 6
7 8
, alıyorum:
1 0
3 0
5 0
7 0
1 4
3 6
5 8
7 0
4204240 2
Linux altında Solaris'in altında neden farklı olacağını herkes biliyor mu? Açıkçası haritadaki indeksi okumadan önce haritadaki değerin okunması, ama nedenini bilmiyorum. Ben biraz kod değiştirerek Linux altında çalışacak yapabilirsiniz:
std::map<int, int> imap;
int idx, value;
std::string str("1 2 3 4 5 6 7 8");
istringstream is(str);
while(is >> idx >> value){
imap[idx] = value;
cout << idx << " " << imap[idx] << endl;
}
std::map<int, int>::iterator itr;
for(itr = imap.begin(); itr != imap.end(); itr++){
cout << itr->first << " " << itr->second << endl;
}
Ben geçerli bir düzeltme olduğunu biliyorum, ama neden farklı olduğunu bilmek istiyorum çevremdeki insanlar var. Solaris'ten Linux'a geçiyoruz ve bunun gibi şeyler ortaya çıktığında nedenini bilmek istiyorlar. Nedenini bilmiyorum, bu yüzden rehberlik istiyorum.
Bu bir makinede çalıştığı ve diğer bir deyişle, tanımlanmamış bir davranış olduğu anlamına gelir – smac89
Burada da benzer işlem sırası siparişleri alındı, buradaki '' >> idx >> imap [idx] ifadesi, bir değişken değişkeni değerlendirir en az bir kez değiştirirken zamanlar. Http://stackoverflow.com/questions/4176328 adresine bakın. –