STL 單純資料處理函式

2021-07-10 15:08:35 字數 2940 閱讀 4736

#include#include#include#include#include#includeusing namespace std;

//單純資料處理演算法

/*adjacent_find 尋找相鄰滿足條件的元素對 返回前乙個的迭代器

count 統計某值出現的次數

count_if 統計滿足條件的值的個數

max_element min_element

partation 劃分函式

search_n 尋找n個連續滿足條件的子串行 返回開始的迭代器

unique 去重(至針對已近排好序的陣列 公升降均可

*/templateclass func

};templateclass count

bool operator()(const t& val)const

private:

t m_t1, m_t2;

};templateclass par

};templateclass search

};int main(void)

; vectorvec(a,a+sizeof(a)/sizeof(a[0]));

cout << *adjacent_find(vec.begin(),vec.end(),func())<(2,4)) << endl;

//這樣寫法是錯誤的 因為 第三個引數 必須是 乙個實值(可以使用count_if)

cout << "count_if......"<(2,4)) << endl;

//當函式物件需要 引數時 可以寫為靜態成員 或者 私有成員

//今天成員 在類外賦值 私有成員 在建構函式傳遞

copy(vec.begin(),vec.end(),ostream_iterator(cout," "));

puts("");

cout << "the val is:...." << *find_if(vec.begin(), vec.end(), count(2, 4)) << endl;

//返回滿足條件的迭代器 失敗時返回end(),此處 沒有判斷

vector::iterator ite=remove(vec.begin(),vec.end(),6);

copy(vec.begin(), vec.end(), ostream_iterator(cout, " "));

//0 1 2 4 5 7 8 6 7 8

//-------------。。。。 remove並非刪除 而是用其它元素進行覆蓋

//迭代器 指向 6 真正刪除 需要用erase(f,l);

//於此對應 還有 remove_if 與remove類似

puts("");

//replace replace_if 如出一轍

//需要說明的是 兩個函式 最後乙個引數 都是需要替換的 新值 不可在 函式中指出

//reverse 逆序函式 用的很多(需要雙向迭代器 slist什麼的就不行)

vectorvec1(a, a + sizeof(a) / sizeof(a[0]));

vectorvec2(a,a+5);

ite = find_end(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());

//在 [f1,l1)區間中尋找[f2,l2)最後一次出現的位置 也可以指定二元運算 f返回迭代器

//find_first_of 與find_end 是剛好對立的

cout << "the pos val is :" << *ite << endl;

cout << *max_element(vec1.begin(),vec1.end())<

cludes!");

} partition(vec1.begin(), vec1.end(),par());

copy(vec1.begin(), vec1.end(), ostream_iterator(cout, " "));

//滿足條件放在左邊 不滿足放在右邊

puts("");

sort(vec1.begin(), vec1.end());

ite = unique(vec1.begin(), vec1.end());

//去重 但不刪除 只是進行覆蓋 尾部有殘餘資料

//陣列最好使用unique_copy 因為陣列無法縮小其大小

copy(vec1.begin(), vec1.end(), ostream_iterator(cout, " "));

//0 1 2 4 5 6 7 8 7 8

puts("");

/* vec1.erase(ite,vec1.end());

//這樣才能真正去重

copy(vec1.begin(), vec1.end(), ostream_iterator(cout, " "));

puts("");

//0 1 2 4 5 6 7 8

*/ //search 與find_first_of 是一樣的

vec1 = vector(a, a + sizeof(a) / sizeof(a[0]));

copy(vec1.begin(), vec1.end(), ostream_iterator(cout, " "));

//在該區間 尋找

ite = search_n(vec1.begin(),vec1.end(),3,3,search());

//尋找連續3個能被3整除的子串行

//iterator search_n(f,l,count,val,comp)

//f l為區間 count為子串行出現次數 val為comp二元運算的第二個引數值

//函式會將 區間內的元素代入 comp中的第乙個 引數

if (ite != vec1.end())

return 0;

}

資料處理函式

資料處理函式 1,計算字串長度 主流資料庫系統都提供了計算字串長度的函式,在mysql oracle db2中這個函式 名稱為length,而在mssqlserver中這個函式的名稱則為len。這個函式接受乙個字串類 型的字段值做為引數,返回值為這個字串的長度。下面的sql語句計算每乙個名稱不為空 ...

資料處理函式

1 lower 轉換小寫 2 upper 轉換大寫 3 substr 擷取子字串 4 length 取長度 例如查詢員工姓名長度為5的 5 trim 去空格,去掉的是首尾空格 6 to date 將字串轉換成日期 7 to char 將日期或數字轉換成字串 8 to number 將字串轉換成數字 ...

資料處理函式

我們先來看看常用的文字處理函式都有哪些 函式說明 left 返回串左邊的字元 lenght 返回串的長度 locate 找出串的乙個字串 lower 將串轉換為小寫 ltrim 去掉串左邊的空格 rtrim 去掉串右邊的空格 right 返回串右邊的字元 soundex 返回串的soundex值 s...