按此前往C++完整教學目錄

 

 

List的其他功能(排序、合併、切割、反轉、對換)

範例如:

bool sort1(int x,int y)

{

return x%10<y%10;

}

bool u1(int x,int y)

{

return x%10==y%10;

}

int main(int argc, char *argv[])

{   //主程式在此

int tta[5]={25,55,55,34,90};

int ttb[5]={34,22,12,17,49};

list<int> a(tta,tta+5), b(ttb,ttb+5);

list<int>::iterator i,j,k;

for(i=a.begin();i!=a.end();i++)

{

cout<<*i<<",";

}

cout<<endl;   //顯示:25,55,55,34,90,

for(i=b.begin();i!=b.end();i++)

{

cout<<*i<<",";

}

cout<<endl;    //顯示:34,22,12,17,49,

[操作程式碼// 以下有範例說明

for(i=a.begin();i!=a.end();i++)

{

                  cout<<*i<<",";

}

cout<<endl;  //顯示結果一

for(i=b.begin();i!=b.end();i++)

{

cout<<*i<<",";

}

cout<<endl;    //顯示結果二

}

(1) 排序:將串列元素由小排到大。例若[操作程式碼]a.sort();,顯示結果一為25,34,55,55,90,

(2) 有條件的排序:[操作程式碼]為:串列名稱.sort(雙元判斷式);,則會從串列的第1個位置開始,將第1個位置的元素和第1+1個位置的元素放入雙元判斷式,回傳true則第1個位置的元素、第1+1個位置的元素兩者位置對調,回傳false則不更動。然後再如法炮製將第2、第2+1個元素放入雙元判斷式,再將第3、第3+1個元素放入雙元判斷式在將第n、第n+1個元素放入雙元判斷式

例如:操作程式碼為:a.sort(sort1);,顯示結果為:90,34,25,55,55,

(3) 排序合併:可將一串列併入另一串列。若兩串列都經sort()排序,則合併出的串列排序法也經sort()排序。例若[操作程式碼]為:

a.sort();b.sort();

a.merge(b);

顯示結果一為:12,17,22,25,34,34,49,55,55,90,

顯示結果二為:                         //空無一物

註:若兩者沒有使用排序法,也可合併。不過合併結果便無排序法。

(4) 有條件的排序合併:若兩串列使用的條件排序規則(雙元判斷式)相同,使用串列名稱一.merge(串列名稱二 , 雙元判斷式);,則將串列二合併入串列一,並且合併後依照相同的條件排序規則。

例若[操作程式碼]為:

a.sort(sort1);b.sort(sort1);

a.merge(b,sort1);

顯示結果一為:90,22,12,34,34,25,55,55,17,49,

顯示結果二為:                         //空無一物

(5) 切割搬移串列元素的第一種方法:[操作程式碼]為:串列名稱一.splice(迭代器一 , 串列名稱二 , 迭代器二);,則將串列二在迭代器二位址上的元素,切割下來、並搬移到串列一在迭代器一的位址。例若操作程式碼為:

i=a.begin();i++;

j=b.begin();j++;

a.splice(i,b,j);

顯示結果一為:25,22,55,55,34,90,

顯示結果二為:34,12,17,49,

(6) 切割搬移串列元素的第二種方法:[操作程式碼]為:串列名稱一.splice(迭代器一 , 串列名稱二 , 迭代器二 , 迭代器三);,則將串列二在「迭代器二位址到迭代器三位址」之間的元素,切割下來、並搬移到串列一在迭代器一的位址。例若操作程式碼為:

i=a.begin();i++;

j=b.begin();j++;

k=b.end();k--;

a.splice(i,b,j,k);

顯示結果一為:25,22, 12,17,55,55,34,90,

顯示結果二為:34, 49,

(7) 切割搬移串列元素的第三種方法:[操作程式碼]為:串列名稱一.splice(迭代器一 , 串列名稱二);,則將串列二整個切割下來、並搬移到串列一在迭代器一的位址。例若操作程式碼為:

i=a.begin();i++;

a.splice(i,b);

顯示結果一為:25,34,22,12,17,49,55,55,34,90,

顯示結果二為:                         //空無一物

(8) 倒轉串列元素次序:例若[操作程式碼]為:a.reverse();

顯示結果一為:90,34,55,55,25,

(9) 與其他串列整個對換:例若[操作程式碼]為:a.swap(b);

顯示結果一為:34,22,12,17,49,

顯示結果二為:25,55,55,34,90,

(10) 將此串列內,位址相鄰且值相同的元素合併為單一元素:例若[操作程式碼]為:a.unique();

顯示結果一為:25,55,34,90,

(11)若操作程式碼為:串列名稱. unique (雙元判斷式);,則會從串列的第1個位置開始,將第1個位置的元素和第1+1個位置的元素放入雙元判斷式,回傳true則第1個位置的元素、第1+1個位置的元素兩者合併為單一元素,回傳false則不更動。然後再如法炮製將第2、第2+1個元素放入雙元判斷式,再將第3、第3+1個元素放入雙元判斷式在將第n、第n+1個元素放入雙元判斷式

例若[操作程式碼]為:a.unique(u1);

顯示結果一為:25,34,90,

 

 

上一篇:list

下一篇:樣板(template)

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(2) 人氣()