精華區beta CompBook 關於我們 聯絡資訊
C++ Primer 答客問 (10) 侯捷 jjhou@ccca.nctu.edu.tw 1999.10.29 第一次發表於 清大.楓橋驛站(140.114.87.5).電腦書訊版(Computer/CompBook) 本文將於日後整理於 侯捷網站/作品勘誤/C++ Primer 中文版/答客問 侯捷網站:www.jjhou.com ---------------------------------------------------------------- Jimmy wrote (1999/10/25) : > 侯先生您好: > 我是上次詢問 p1130 copy_backward() 的問題的人。抱歉又來打擾您。 > > 這一次我的問題是 p1162 的 nth_element()。我把書上程式 > 按照您的網站上的說明加以修改,以 VC 6.0 編譯,執行後的 > 結果卻與書上不同。書上的結果是: > > original order of the vector: 29 23 20 22 17 15 26 51 19 12 35 40 > sorting vector based on element 26 > 12 15 17 19 20 22 23 26 51 29 35 40 > sorting vector in descending order based on element 23 > 40 35 29 51 26 23 22 20 19 17 15 12 > > 我的結果卻是: > > original order of the vector: 29 23 20 22 17 15 26 51 19 12 35 40 > sorting vector based on element 26 > 12 15 17 19 20 22 23 26 29 35 40 51 > sorting vector in descending order based on element 23 > 51 40 35 29 26 23 22 20 19 17 15 12 > > 可否請您檢驗一下。 侯捷回覆: 喔,Jimmy,你一定是疏忽了 p.1163 的第二行: 「重新安排後的第 n 個元素的左右兩側並不保證有任何特定次序」 換句話說 nth_element() 這個泛型演算法只保證將小於 nth 元素的 所有元素都放在 nth 元素之前,將大於 nth 元素的所有元素都放在 nth 元素之後(當然,此後,原本的 nth 元素就不再是放在 nth 位置了)。 至於重新安排後的第 n 個元素的左右兩側,並不保證有任何特定次序。 我以 BCB4 和 GCC(egcs-2.91.57) 測試,結果正如書中所列。 -- the end -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: jjhou@ccca.nctu.edu.tw