請問 vector 裡的二個物件怎麼互換 |
尚未結案
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
例如:現在我要把第x個和第x+1個互換
請問要怎麼做? 我試過
temp = my_vector.at(x); my_vector.erase(&my_vector[x]); insert(my_vector.begin() x,my_vector.at(x 1)); my_vector.erase(&my_vector[x]); insert(my_vector.begin() x 1,temp);compile 的時候是沒問題,但執行的時候會有錯 老實說不知道錯在那裡? 不知道有沒有比較正統的做法 謝謝 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
cowbjt你好:
swap應該是沒有問題的,我測式結果也是ok
//--------------------------------------------------------------------------- #include重點在你的container的宣告是什麼?有些container是不能用indexing的operator(就是[]),有些則是不能swap。 |
fffhghgjh
一般會員 發表:2 回覆:33 積分:17 註冊:2004-12-23 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
swap有分兩類,一類是定在algorithm裡,BCB的Help就有資料了:
#include另一類swap是container的member function,這類是專門給container作swap用的,在效率上比使用algorithm的swap還好,所以才特別訂作。 至於vector回到主題,一個vector的成員要能swap有不少要件。其中如果你是用到自訂的型別,那要確定你的class是否是copy safe(我想會出錯誤可能問題是出在這)。基本上你可以檢查看看class的成員是否有pointer,如果有那就要實作big three(copy constructor, assignment perator, destructor)..。除此之外,還有不少要注意的地方,寫這個主題可能要花上一個文章來探討... 當然如果你能放上你 |
fffhghgjh
一般會員 發表:2 回覆:33 積分:17 註冊:2004-12-23 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
pwipwi大大說的已經是正解了
我這裡的測試也是正常的
int main() { int a[5]={1,2,3,4,5}; vector會發生std::out of rang 錯誤通常是你給的索引值超出陣列裡的元素數量 但是我查規格書,用[]運算子取值的時候,並不會進行範圍檢查 理論上應該不會出現這樣的錯誤訊息 只有at運算子才會進行範圍檢查,如果可以的話,把你測試的程式碼都貼上來看看 另外,針對你第一個程式碼我另外寫了一個測試程式,你看一下: int main() { int a[5]={1,2,3,4,5}; vector注意!第一次erase的時候,後面的元素會往前遞補 所以第一次insert的時候,取到的元素是3,而不是2! 我建議用swap就好 如同上面的例子,你刪除或插入元素的時候,後面的元素都會跟著變動 如果你有很多元素的時候,電腦光搬這些資料就行了 其他事都不用做了 vector容器並不適合這種用途 而fffhghgjh所言 vector有個特化版本的swap 則跟你的程式一點關係都沒有,可以暫不理會.. 事實上,swap通常都被定義為 template能接受任何的型別 vector::swap則只接受一個參數 所以 my_vector.swap(my_vector[x],my_vector[x 1]); 編譯不過是正常的 發表人 - justdo 於 2005/01/10 21:55:10 |
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
我的程式碼實在太多了
好像8xx 行 而我要swap的部分其實很簡單
我是要做一下簡單的泡沫排序
(後來我用qsort完成了,但我還是想知道vector要如何swap,所以我問了一下)
我那一段程式碼是
bool chang = true; while(chang) { chang = false; for(int x=0;x |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
cowbjt
一般會員 發表:11 回覆:30 積分:8 註冊:2004-07-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |