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