零基础入门Qwen-Image-Layered,轻松实现图像智能分割

核心内容摘要

Qwen3-Reranker Semantic Refiner实战案例:高校图书馆数字资源语义检索
前后端分离医院病历管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

Spring 中使用Mybatis,超详细

1ã€�é��修改åº�列算法这些算法ä¸�会改å�˜å®ƒä»¬æ‰€æ“�ä½œçš„å®¹å™¨ä¸­çš„å…ƒç´ ã€‚

1 find å’Œ find_iffind(begin, end, value)查找第一个等äº�valueçš„å…ƒç´ è¿”å›�迭代器未找到返å›�end。find_if(begin, end, predicate)查找第一个满足谓è¯�çš„å…ƒç´ ã€‚find_end(begin, end, sub_begin, sub_end)查找å­�åº�列最å��一次出ç�°çš„ä½�置。vectorint nums {1, 3, 5, 7, 9}; // 查找值为5çš„å…ƒç´ auto it find(nums.begin(), nums.end(),

; if (it ! nums.end()) { cout found: *it endl; // 输出5 } // 查找第一个大äº�6çš„å…ƒç´ auto it2 find_if(nums.begin(), nums.end(), [](int x) { return x 6; }); cout first 6: *it2 endl; // 输出7 // 查找å­�åº�列 vectorint sub {3, 5}; auto it3 find_end(nums.begin(), nums.end(), sub.begin(), sub.end()); if (it3 ! nums.end()) { cout subsequence starts at index: it3 - nums.begin() endl; // 输出1 }

2 count å’Œ count_ifcount(begin, end, value)统计等äº�valueçš„å…ƒç´ ä¸ªæ•°ã€‚count_if(begin, end, predicate)统计满足谓è¯�predicateçš„å…ƒç´ ä¸ªæ•°ã€‚std::vectorint vec {1, 2, 3, 2, 4, 2}; int cnt std::count(vec.begin(), vec.end(),

; // 计数2的个数结�为3 int even_cnt std::count_if(vec.begin(), vec.end(), [](int x) { return x % 2 0; }); // �数个数结�为

4

3 for_each对范围内的æ¯�ä¸ªå…ƒç´ åº”ç”¨ä¸€ä¸ªå‡½æ•°std::vectorint vec {1, 2, 3, 4, 5}; std::for_each(vec.begin(), vec.end(), [](int x) { x * 2; // å°†æ¯�ä¸ªå…ƒç´ ä¹˜ä»¥2 }); // ç�°åœ¨vecå�˜ä¸º{2, 4, 6, 8, 10}

4 equal � mismatchequal(b1, e1, b

判断两个范围[b1,e

和[b2, b2(e1-b

)是�相等。mismatch(b1, e1, b

è¿”å›�两个范围中第一个ä¸�ç›¸ç­‰å…ƒç´ çš„è¿­ä»£å™¨å¯¹pair。vectorint a {1, 2, 3}; vectorint b {1, 2, 4}; vectorint c {1, 2, 3, 4}; // 比较aå’Œbçš„å‰�3ä¸ªå…ƒç´ bool is_equal equal(a.begin(), a.end(), b.begin()); cout a b? boolalpha is_equal endl; // 输出false // 查找aå’Œc的第一个ä¸�匹é…�å…ƒç´ auto mis mismatch(a.begin(), a.end(), c.begin()); if (mis.first ! a.end()) { cout mismatch: *mis.first vs *mis.second endl; // æ— è¾“å‡ºaå’Œcå‰�3å…ƒç´ ç›¸ç­‰ }

5 all_of, any_of, none_ofæ£€æŸ¥èŒƒå›´å†…å…ƒç´ æ˜¯å�¦å…¨éƒ¨ã€�存在或没有满足æ�¡ä»¶çš„std::vectorint vec {2, 4, 6, 8}; bool all_even std::all_of(vec.begin(), vec.end(), [](int x) { return x % 2 0; }); // true bool any_odd std::any_of(vec.begin(), vec.end(), [](int x) { return x % 2 ! 0; }); // false bool none_negative std::none_of(vec.begin(), vec.end(), [](int x) { return x 0; }); // true2ã€�修改åº�列算法这些算法会修改它们所æ“�ä½œçš„å®¹å™¨ä¸­çš„å…ƒç´ ã€‚

1 copy å’Œ copy_ifcopy(begin, end, dest)å°†[begin, end)ä¸­çš„å…ƒç´ å¤�制到dest开始的ä½�置。copy_if(begin, end, dest, predicate)å¤�制满足谓è¯�çš„å…ƒç´ åˆ°dest。vectorint src {1, 2, 3, 4, 5}; vectorint dest(

; // 需预先分é…�足够空间 // å¤�åˆ¶æ‰€æœ‰å…ƒç´ copy(src.begin(), src.end(), dest.begin()); // dest: [1,2,3,4,5] // å¤�制å�¶æ•°å…ƒç´ 到新容器 vectorint evens; copy_if(src.begin(), src.end(), back_inserter(evens), [](int x) { return x % 2 0; }); // evens: [2,4]注æ„�back_inserter(dest)会自动调用push_backæ— éœ€æ��å‰�分é…�空间。

2 transform对范围内的æ¯�ä¸ªå…ƒç´ åº”ç”¨ä¸€ä¸ªå‡½æ•°å¹¶å°†ç»“æ�œå­˜å‚¨åœ¨å�¦ä¸€ä¸ªèŒƒå›´å†…vectorint nums {1, 2, 3}; vectorint squares(

; // 计算平方å�•å�‚数转æ�¢ transform(nums.begin(), nums.end(), squares.begin(), [](int x) { return x * x; }); // squares: [1,4,9] // ä¸¤å®¹å™¨å…ƒç´ ç›¸åŠ å�Œå�‚数转æ�¢ vectorint a {1, 2, 3}; vectorint b {4, 5, 6}; vectorint sum(

; transform(a.begin(), a.end(), b.begin(), sum.begin(), [](int x, int y) { return x y; }); // sum: [5,7,9]

3 replaceã€�replace_ifä¸� replace_copyreplace(begin, end, old_val, new_val)将所有old_val替æ�¢ä¸ºnew_val。replace_if(begin, end, predicate, new_val)替æ�¢æ»¡è¶³è°“è¯�çš„å…ƒç´ ã€‚replace_copy(begin, end, dest, old_val, new_val)å¤�制时替æ�¢å…ƒç´ ä¸�修改å�Ÿå®¹å™¨ã€‚vectorint nums {1, 2, 3, 2, 5}; // 替æ�¢æ‰€æœ‰2为20 replace(nums.begin(), nums.end(), 2,

; // nums: [1,20,3,20,5] // 替æ�¢å¤§äº�10çš„å…ƒç´ ä¸º0 replace_if(nums.begin(), nums.end(), [](int x) { return x 10; },

; // nums: [1,0,3,0,5] // �制时替�3为300�容器�� vectorint res; replace_copy(nums.begin(), nums.end(), back_inserter(res), 3,

; // res: [1,0,300,0,5]

4 removeã€�remove_if ä¸� eraseremove(begin, end, value)将等äº�valueçš„å…ƒç´ â€œç§»åŠ¨â€� 到容器末尾返å›�新的逻辑尾迭代器ä¸�å®�é™…åˆ é™¤å…ƒç´ éœ€é…�å�ˆerase。remove_if(begin, end, predicate)移动满足谓è¯�çš„å…ƒç´ åˆ°æœ«å°¾ã€‚vectorint nums {1, 2, 3, 2, 4}; // é€»è¾‘åˆ é™¤æ‰€æœ‰2移动到末尾 auto new_end remove(nums.begin(), nums.end(),

; // nums: [1,3,4,2,2] // 物ç�†åˆ é™¤çœŸæ­£ç§»é™¤å…ƒç´ nums.erase(new_end, nums.end()); // nums: [1,3,4] // 结å�ˆlambdaåˆ é™¤å�¶æ•° nums {1, 2, 3, 4, 5}; nums.erase(remove_if(nums.begin(), nums.end(), [](int x) { return x % 2 0; }), nums.end()); // nums: [1,3,5]

5 unique移除范围内è¿�ç»­çš„é‡�å¤�å…ƒç´ è¿”å›�新的逻辑结尾迭代器。通常ä¸�erase结å�ˆä½¿ç”¨ã€‚std::vectorint vec {1, 1, 2, 2, 3, 3, 3, 4, 5}; auto last std::unique(vec.begin(), vec.end()); vec.erase(last, vec.end()); // vecå�˜ä¸º{1, 2, 3, 4, 5}

6 reverseå��è½¬èŒƒå›´å†…çš„å…ƒç´ é¡ºåº�std::vectorint vec {1, 2, 3, 4, 5}; std::reverse(vec.begin(), vec.end()); // vecå�˜ä¸º{5, 4, 3, 2, 1}

7 rotateæ—‹è½¬èŒƒå›´å†…çš„å…ƒç´ ä½¿ä¸­é—´å…ƒç´ æˆ�ä¸ºæ–°çš„ç¬¬ä¸€ä¸ªå…ƒç´ std::vectorint vec {1, 2, 3, 4, 5}; std::rotate(vec.begin(), vec.begin() 2, vec.end()); // 以3为起点旋转vecå�˜ä¸º{3, 4, 5, 1, 2}

8 shuffleéš�机é‡�æ�’èŒƒå›´å†…çš„å…ƒç´ éœ€è¦�C11或更高版本#include random #include algorithm std::vectorint vec {1, 2, 3, 4, 5}; std::random_device rd; std::mt19937 g(rd()); std::shuffle(vec.begin(), vec.end(), g); // éš�机打乱vecä¸­çš„å…ƒç´ 3ã€�æ�’åº�和相关算法

1 sortã€�stable_sort ä¸� partial_sortsort(begin, end)å¯¹å…ƒç´ è¿›è¡Œå¿«é€Ÿæ�’åº�ä¸�稳定平å�‡æ—¶é—´å¤�æ�‚度 O (n log n)。stable_sort(begin, end)稳定æ�’åº�ç›¸ç­‰å…ƒç´ ç›¸å¯¹ä½�ç½®ä¸�å�˜ã€‚partial_sort(begin, mid, end)部分æ�’åº�使[begin, mid)为整个范围中最å°�çš„å…ƒç´ å¹¶æ�’åº�。std::vectorint vec {5, 3, 1, 4, 2}; std::sort(vec.begin(), vec.end()); // 默认å�‡åº�vecå�˜ä¸º{1, 2, 3, 4, 5} std::sort(vec.begin(), vec.end(), std::greaterint()); // é™�åº�vecå�˜ä¸º{5, 4, 3, 2, 1} std::sort(vec.begin(), vec.end(), [](int a, int b) { return a b; }); // å�‡åº�自定义比较 std::vectorstd::pairint, int vec ; std::stable_sort(vec.begin(), vec.end(), [](const auto a, const auto b) { return a.first b.first; // 按firstæ�’åº�ä¿�æŒ�ç›¸ç­‰å…ƒç´ çš„ç›¸å¯¹é¡ºåº� }); std::vectorint vec {5, 3, 1, 4, 2, 6}; // 将最å°�çš„3ä¸ªå…ƒç´ æ”¾åœ¨å‰�é�¢å¹¶æ�’åº� std::partial_sort(vec.begin(), vec.begin() 3, vec.end()); // ç�°åœ¨vecå‰�ä¸‰ä¸ªå…ƒç´ æ˜¯1, 2, 3å��é�¢æ˜¯æœªæ�’åº�çš„4, 5,

6

2 nth_elementé‡�æ–°æ�’列范围使得指定ä½�ç½®çš„å…ƒç´ ç­‰äº�æ�’åº�å��çš„å…ƒç´ å¹¶ä¸”å·¦è¾¹çš„å…ƒç´ éƒ½ä¸�大äº�它å�³è¾¹çš„å…ƒç´ éƒ½ä¸�å°�äº�它std::vectorint vec {5, 3, 1, 4, 2, 6}; // 找到第三å°�çš„å…ƒç´ ç´¢å¼•2 std::nth_element(vec.begin(), vec.begin() 2, vec.end()); // ç�°åœ¨vec[2]是3å®ƒå·¦è¾¹çš„å…ƒç´ 3å�³è¾¹çš„

3

3 binary_searchã€�lower_boundã€�upper_bound需在已æ�’åº�的容器上使用binary_search(begin, end, value)判断value是å�¦å­˜åœ¨è¿”å›�bool。lower_bound(begin, end, value)è¿”å›�第一个ä¸�å°�äº�valueçš„å…ƒç´ è¿­ä»£å™¨ã€‚upper_bound(begin, end, value)è¿”å›�第一个大äº�valueçš„å…ƒç´ è¿­ä»£å™¨ã€‚vectorint sorted {1, 3, 3, 5, 7}; // 必须先æ�’åº� // 判断3是å�¦å­˜åœ¨ bool exists binary_search(sorted.begin(), sorted.end(),

; // true // 查找第一个3çš„å…ƒç´ auto lb lower_bound(sorted.begin(), sorted.end(),

; cout lower_bound index: lb - sorted.begin() endl; // 输出1 // 查找第一个3çš„å…ƒç´ auto ub upper_bound(sorted.begin(), sorted.end(),

; cout upper_bound index: ub - sorted.begin() endl; // 输出

3

4 mergeå�ˆå¹¶ä¸¤ä¸ªå·²æ�’åº�的范围到新容器ä¿�æŒ�æ�’åº�vectorint a {1, 3, 5}; vectorint b {2, 4, 6}; vectorint merged(a.size() b.size()); // å�ˆå¹¶aå’Œbå�‡éœ€å·²æ�’åº� merge(a.begin(), a.end(), b.begin(), b.end(), merged.begin()); // merged: [1,2,3,4,5,6]4ã€�å †ç®—æ³•STLæ��ä¾›äº†å°†èŒƒå›´ä½œä¸ºå †æ�¥æ“�作的算法包括make_heap,push_heap,pop_heap,sort_heap等。std::vectorint vec {4, 1, 3, 2, 5}; std::make_heap(vec.begin(), vec.end()); // æ�„å»ºæœ€å¤§å †vecå�˜ä¸º{5, 4, 3, 2, 1} vec.push_back(

; std::push_heap(vec.begin(), vec.end()); // å°†æ–°å…ƒç´ åŠ å…¥å †vecå�˜ä¸º{6, 4, 5, 2, 1, 3} std::pop_heap(vec.begin(), vec.end()); // å°†æœ€å¤§å…ƒç´ ç§»åˆ°æœ«å°¾vecå�˜ä¸º{5, 4, 3, 2, 1, 6} int max_val vec.back(); // è�·å�–æœ€å¤§å…ƒç´ 6 vec.pop_back(); // ç§»é™¤æœ€å¤§å…ƒç´ std::sort_heap(vec.begin(), vec.end()); // å°†å †æ�’åº�为å�‡åº�åº�列vecå�˜ä¸º{1, 2, 3, 4, 5}5ã€�最å°�/最大值算法

1 min 和 max返�两个值或�始化列表中的最�/最大值int a 5, b 3; int min_val std::min(a, b); // 3 int max_val std::max(a, b); // 5 auto min_of_list std::min({4, 2, 8, 5, 1}); // 1 auto max_of_list std::max({4, 2, 8, 5, 1}); //

8

2 min_element å’Œ max_elementè¿”å›�范围内的最å°�/æœ€å¤§å…ƒç´ çš„è¿­ä»£å™¨std::vectorint vec {3, 1, 4, 2, 5}; auto min_it std::min_element(vec.begin(), vec.end()); // 指å�‘1 auto max_it std::max_element(vec.begin(), vec.end()); // 指å�‘

5

3 minmax_element (C

å�Œæ—¶è¿”å›�范围内的最å°�å’Œæœ€å¤§å…ƒç´ çš„è¿­ä»£å™¨std::vectorint vec {3, 1, 4, 2, 5}; auto minmax std::minmax_element(vec.begin(), vec.end()); // minmax.first指å�‘1minmax.second指å�‘56ã€�数值算法在numeric中

1 accumulateè®¡ç®—èŒƒå›´å†…å…ƒç´ çš„ç´¯åŠ å’Œæˆ–è‡ªå®šä¹‰æ“�作#include numeric std::vectorint vec {1, 2, 3, 4, 5}; int sum std::accumulate(vec.begin(), vec.end(),

; // 和�始值为0结�为15 int product std::accumulate(vec.begin(), vec.end(), 1, std::multipliesint()); // 乘积�始值为1结�为

1

2 inner_product计算两个范围的内积或自定义�作std::vectorint a {1, 2, 3}; std::vectorint b {4, 5, 6}; int dot std::inner_product(a.begin(), a.end(), b.begin(),

; // 1*4 2*5 3*6

3

3 iota用�续递�的值填充范围std::vectorint vec(

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

; // 填充为10, 11, 12, 13,

1

4 partial_sum计算部分和将结æ�œå­˜å‚¨åœ¨ç›®æ ‡èŒƒå›´å†…std::vectorint src {1, 2, 3, 4, 5}; std::vectorint dst(src.size()); std::partial_sum(src.begin(), src.end(), dst.begin()); // dstå�˜ä¸º{1, 3, 6, 10, 15}

5 adjacent_differenceè®¡ç®—ç›¸é‚»å…ƒç´ çš„å·®å€¼å°†ç»“æ�œå­˜å‚¨åœ¨ç›®æ ‡èŒƒå›´å†…std::vectorint src {1, 2, 3, 4, 5}; std::vectorint dst(src.size()); std::adjacent_difference(src.begin(), src.end(), dst.begin()); // dstå�˜ä¸º{1, 1, 1, 1, 1}7ã€�å…¶ä»–

1 generate用生�函数填充范围std::vectorint vec(

; int n 0; std::generate(vec.begin(), vec.end(), [n]() { return n; }); // 填充为0, 1, 2, 3,

4

2 generate_n用生æˆ�函数填充范围的开始nä¸ªå…ƒç´ std::vectorint vec(

; int n 10; std::generate_n(vec.begin(), 3, [n]() { return n; }); // å‰�ä¸‰ä¸ªå…ƒç´ ä¸º10, 11, 12å��两个ä¿�æŒ�ä¸�å�˜

3 includes检查一个æ�’åº�范围是å�¦åŒ…å�«å�¦ä¸€ä¸ªæ�’åº�èŒƒå›´çš„æ‰€æœ‰å…ƒç´ std::vectorint vec1 {1, 2, 3, 4, 5}; std::vectorint vec2 {2, 4}; bool includes std::includes(vec

begin(), vec

end(), vec

begin(), vec

end()); // true

3 set_union, set_intersection, set_difference, set_symmetric_difference执行集��作并集�交集�差集和对称差集std::vectorint v1 {1, 2, 3, 4, 5}; std::vectorint v2 {3, 4, 5, 6, 7}; std::vectorint result; // 并集 std::set_union(v

begin(), v

end(), v

begin(), v

end(), std::back_inserter(result)); // result为{1, 2, 3, 4, 5, 6, 7} // 交集 result.clear(); std::set_intersection(v

begin(), v

end(), v

begin(), v

end(), std::back_inserter(result)); // result为{3, 4, 5} // 差集 (v1 - v

result.clear(); std::set_difference(v

begin(), v

end(), v

begin(), v

end(), std::back_inserter(result)); // result为{1, 2} // 对称差集 (v1 ∪ v2 - v1 ∩ v

result.clear(); std::set_symmetric_difference(v

begin(), v

end(), v

begin(), v

end(), std::back_inserter(result)); // result为{1, 2, 6, 7}8ã€�常è§�问题sortä¸�stable_sort的区别sort采用快速æ�’åº�å®�际是 introsort 算法ä¸�ç¨³å®šç›¸ç­‰å…ƒç´ çš„ç›¸å¯¹ä½�ç½®å�¯èƒ½æ”¹å�˜å¹³å�‡æ—¶é—´å¤�æ�‚度 O (n log n)。stable_sort采用归并æ�’åº�ç¨³å®šç›¸ç­‰å…ƒç´ ç›¸å¯¹ä½�ç½®ä¸�å�˜æ—¶é—´å¤�æ�‚度 O (n log n)但空间开销略大。为什么remove算法需è¦�é…�å�ˆerase使用remove算法的å�Ÿç�†æ˜¯ “覆盖â€� è¦�åˆ é™¤çš„å…ƒç´ å°†ä¿�ç•™çš„å…ƒç´ ç§»åˆ°å‰�é�¢è¿”å›�新的逻辑尾迭代器但ä¸�修改容器的å®�际大å°�。eraseåˆ™é€šè¿‡è¿­ä»£å™¨èŒƒå›´çœŸæ­£åˆ é™¤å…ƒç´ ä¿®æ”¹å®¹å™¨å¤§å°�ã€‚å› æ­¤éœ€ç»“å�ˆä½¿ç”¨container.erase(remove(...), container.end())。哪些算法需è¦�容器是已æ�’åº�的二分查找系列binary_searchã€�lower_boundã€�upper_boundã€�集å�ˆç®—法set_intersectionã€�set_unionç­‰ã€�merge等这些算法ä¾�赖有åº�性å®�ç�°é«˜æ•ˆæ“�作如二分查找 O (log n)。

小马拉大车的儿子-小马拉大车的儿子应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123