泛型演算法
標頭檔案宣告了一組全域性模板函式,這些函式實現了作用在容器上的基本演算法。 這些函式中的多數使用stl風格迭代器。
stl標頭檔案提供更完整的泛型演算法集合。 這些演算法可以被用在qt容器上以及stl容器上。 如果在你的所有平台上stl實現可用,當qt缺少乙個相同的演算法的時候,那麼可能沒有理由去避開使用stl演算法,。 這裡,我們將介紹最重要的qt演算法。
qfind()演算法在容器中查詢某乙個值。 它接收乙個「beging」和乙個「end」迭代器引數並返回乙個迭代器指向最先匹配的條目,如果沒有匹配就返回"end"。 下面的例子,i被設定為list.begin()+1,而j被設定為list.end()。
qstringlist list;qbinaryfind()演算法就像qfind()那樣執行查詢,然而它假設條目是按公升序排列並使用快速二分查詢而不是qfind()的線性查詢。list << "emma" << "karl" << "james" << "mariette";
qstringlist::iterator i = qfind(list.begin(), list.end(), "karl");
qstringlist::iterator j = qfind(list.begin(), list.end(), "petra");
qfill()用某乙個值來填充容器。
qlinkedlistlist(10);像其他基於迭代器的演算法,通過變換引數,我們也可以在容器的一部分上使用qfill()。 下面的**片段將向量中的前五個條目初始化為1009並將最後五個條目初始化為2013。qfill(list.begin(), list.end(), 1009);
qvectorvect(10);qfill(vect.begin(), vect.begin() + 5, 1009);
qfill(vect.end() - 5, vect.end(), 2013);
qcopy()演算法將乙個容器中的值拷貝到另乙個:
qvectorvect(list.count());qcopy()也可以在同乙個容器內部拷貝資料,只要源範圍和目標範圍不重疊。 在下面的**片段,我們用列表的前兩個條目來覆蓋最後兩個條目。qcopy(list.begin(), list.end(), vect.begin());
qcopy(list.begin(), list.begin() + 2, list.end() - 2);qsort()演算法將容器中的條目按公升序排列。
qsort(list.begin(), list.end());預設情況下,qsort()使用《操作符來比較條目。 為了實現降序排列,將qgreater()作為第三個引數傳遞(t是容器的值型別),像這樣:
qsort(list.begin(), list.end(), qgreater());我們可以使用第三個引數來定義排序標準。 例如,這裡有乙個 "less than" 比較函式,它用大小寫不敏感(case-insensitive)的方式比較qstring:
bool insensitivelessthan(const qstring &str1, const qstring &str2)qsort()的呼叫變成這樣
qstringlist list;qstablesort()演算法和qsort()類似,除了它保證相等的兩個條目在排序後和排序前的順序保持不變。 這個是有用的,如果排序標準只考慮乙個值的某些部分並且結果對使用者可視。 我們在第四章的spreadsheet程式(p. 88)中使用了qstablesort()來實現排序。...qsort(list.begin(), list.end(), insensitivelessthan);
qdeleteall()演算法在每個儲存在容器中的指標上呼叫delete。 只有容器的值型別是指標型別時,它才有意義。 這個之後,容器的條目還存在,直到呼叫clear()。 例如:
qdeleteall(list);qswap()演算法交換兩個變數的值。 例如:list.clear();
int x1 = line.x1();int x2 = line.x2();
if (x1 > x2)
qswap(x1, x2);
最後,標頭檔案,被包含在每個其他qt的標頭檔案中,提供若干有用的定義,包括qabs()函式(返回乙個數的絕對值),和qmin()及qmax()函式(返回兩個值中的最小或最大的)。
1 13 C 集合 非泛型
day13 集合 非泛型 1.system.collections.generic 泛型 system.collections 非泛型 2.集合 非泛型集合和泛型集合 arraylist是線性資料結構 3.動態陣列 arraylist al new arraylist 為了解決陣列的侷限性 1,長度...
C 泛型演算法
標準庫並未給每個容器都定義成員函式來實現這些操作,而是定義了一組泛型演算法,稱他們為演算法是因為他們實現了一些經典演算法的公共介面,如排序和搜尋 稱他們為排序的是因為它們可以用於不同型別的元素和多種容器型別。大多數演算法都定義在標頭檔案algorithm中。標準庫還在標頭檔案numeric中定義了一...
C 泛型演算法
1 泛型演算法初始 標準庫演算法都是對乙個範圍內的元素進行操作 除了少數例外 並將此範圍稱為 輸入範圍 而且總是使用前兩個引數來表示次範圍,這兩個引數分別代表,要處理的首元素和尾元素之後位置的迭代器。1.1 唯讀演算法 只會讀取輸入範圍內的元素,而從不改變元素 find int sum accumu...