在程式中使用STL(第7章)(條款44,45)

2021-10-14 08:41:50 字數 1983 閱讀 5508

這個條款應該是毫無疑問的,下面是書中給出的理由:

1)成員函式往往更快;

2)成員函式通常與容器集合的更加緊密,特別是關聯容器,而這時演算法所不能的,演算法比較處理通用性的東西;

void listtest() ;

listl2;

l1.sort();

l2.sort();

// l1.merge(l2);

// 演算法

listl;

std::merge(l1.begin(), l1.end(), l2.cbegin(), l2.cend(), std::back_inserter(l));

return;

}

場景

一、區間無序

場景二、區間有序

場景三、關聯容器

直接上一張書中的截圖

練習**

void vectortest() ;

// 無序場景的查詢、計數

auto i1 = std::find(vec.cbegin(), vec.cend(), 6); // 使用 operator==

if (i1 != vec.cend()) else

int num = std::count(vec.cbegin(), vec.cend(), 6); // 6的數量

auto i2 = std::find_if(vec.cbegin(), vec.cend(), (int x) ); // 是否存在6

// 有序場景的查詢、計數

std::sort(vec.begin(), vec.end());

bool exist6 = std::binary_search(vec.cbegin(), vec.cend(), 6); // 是否存在6

auto il = std::lower_bound(vec.cbegin(), vec.cend(), 6);

if (il != vec.end() && *il == 6)

auto iu = std::upper_bound(vec.cbegin(), vec.cend(), 6);

int num6 = std::distance(il, iu); // 6的數量

auto ipair = std::equal_range(vec.cbegin(), vec.cend(), 6);

if (ipair.first != ipair.second)

num6 = std::distance(ipair.first, ipair.second); // 6的數量

num6 = ipair.second - ipair.first; // 6的數量

// 有序場景針對某些位置的操作

vec.insert(vec.begin(), 0); // 僅測試,這個插入會導致順序錯誤

vec.insert(std::lower_bound(vec.cbegin(), vec.cend(), 6), 20); // 僅測試,這個插入會導致順序錯誤

std::sort(vec.begin(), vec.end());

vec.insert(std::upper_bound(vec.cbegin(), vec.cend(), 6), 20); // 僅測試,這個插入會導致順序錯誤

std::sort(vec.begin(), vec.end());

vec.erase(vec.begin(), std::lower_bound(vec.cbegin(), vec.cend(), 5)); // 將5前面的元素都刪除

vec.erase(std::upper_bound(vec.cbegin(), vec.cend(), 6), vec.end()); // 將6後面的元素都刪除

return;

}

STL學習筆記 七 程式中使用STL

條款43 演算法呼叫優先於手寫迴圈 class widget vector vec 演算法呼叫 for each vec.begin vec.end mem fun ref widget test 手寫迴圈 for auto it vec.begin it vec.end it it test 演算...

在sdk中使用進度條

include windows.h include commctrl.h initcommoncontrols pragma comment lib,comctl32 initcommoncontrols 過程函式的返回值都是lresult,型別都是callback lresult callback...

在CScrollView中使用滾動條

近日需要在mfc中的mdi中使用帶滾動條的檢視。找了許久發現其實很簡單 1 用基類 cscrollview 生成新檢視 cnewview 2 修改mfc自動生的 cnewview oninitialupdate 原內容為 void cnewview oninitialupdate cscrollvi...