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,
留言列表