Khiêu chuyển chí

STL toán pháp

STL đề cung liễu đại ước 100 cá thật hiện toán pháp đích mô bản hàm sổ, cơ bổn đô bao hàm tại&LTalgorithm>Chi trung, hoàn hữu nhất bộ phân bao hàm tại&LTnumeric>Hòa&LTfunctional>.Hoàn bị đích hàm sổ liệt biểu thỉnhTham kiến tham khảo thủ sách,Bài tự tương quan đích khả dĩ tham khảoBài tự nội dung đích đối ứng hiệt diện.

  • find:Thuận tự tra trảo.find(v.begin(), v.end(), value),Kỳ trungvalueVi nhu yếu tra trảo đích trị.

  • reverse:Phiên chuyển sổ tổ, tự phù xuyến.reverse(v.begin(), v.end())Hoặcreverse(a + begin, a + end).

  • unique:Khứ trừ dung khí trung tương lân đích trọng phục nguyên tố.unique(ForwardIterator first, ForwardIterator last),Phản hồi trị vi chỉ hướngKhứ trọng hậuDung khí kết vĩ đích điệt đại khí, nguyên dung khí đại tiểu bất biến. DữsortKết hợp sử dụng khả dĩ thật hiện hoàn chỉnh dung khí khứ trọng.

  • random_shuffle:Tùy cơ địa đả loạn sổ tổ.random_shuffle(v.begin(), v.end())Hoặcrandom_shuffle(v + begin, v + end).

    random_shuffleHàm sổ tại tối tân C++ tiêu chuẩn trung dĩ bị di trừ

    random_shuffleTự C++14 khởi bị khí dụng, C++17 khởi bị di trừ.

    Tại C++11 dĩ cập canh tân đích tiêu chuẩn trung, nâm khả dĩ sử dụngshuffleHàm sổ đại thế nguyên lai đíchrandom_shuffle.Sử dụng phương pháp vishuffle(v.begin(), v.end(), rng)( tối hậu nhất cá tham sổ truyện nhập đích thị sử dụng đích tùy cơ sổ sinh thành khí, nhất bàn tình huống sử dụng dĩ chân tùy cơ sổ sinh thành khírandom_deviceBá chủng đích mai sâm toàn chuyển ngụy tùy cơ sổ sinh thành khímt19937).

    1
    2
    3
    // #include &LTrandom>
    std::mt19937rng(std::random_device{}());
    std::shuffle(v.begin(),v.end(),rng);
    
  • sort:Bài tự.sort(v.begin(), v.end(), cmp)Hoặcsort(a + begin, a + end, cmp),Kỳ trungendThị bài tự đích sổ tổ tối hậu nhất cá nguyên tố đích hậu nhất vị,cmpVi tự định nghĩa đích bỉ giác hàm sổ.

  • stable_sort:Ổn định bài tự, dụng pháp đồngsort().

  • nth_element:Án chỉ định phạm vi tiến hành phân loại, tức trảo xuất tự liệt trung đệĐại đích nguyên tố, sử kỳ tả biên quân vi tiểu vu tha đích sổ, hữu biên quân vi đại vu tha đích sổ.nth_element(v.begin(), v.begin() + mid, v.end(), cmp)Hoặcnth_element(a + begin, a + begin + mid, a + end, cmp).

  • binary_search:Nhị phân tra trảo.binary_search(v.begin(), v.end(), value),Kỳ trungvalueVi nhu yếu tra trảo đích trị.

  • merge:Tương lưỡng cá ( dĩ bài tự đích ) tự liệtHữu tự hợp tịnhĐáo đệ tam cá tự liệt đíchSáp nhập điệt đại khíThượng.merge(v1.begin(), v1.end(), v2.begin(), v2.end(),back_inserter(v3)).

  • inplace_merge:Tương lưỡng cá ( dĩ án tiểu vu vận toán phù bài tự đích ):[first,middle), [middle,last)Phạm viNguyên địa hợp tịnh vi nhất cá hữu tự tự liệt.inplace_merge(v.begin(), v.begin() + middle, v.end()).

  • lower_bound:Tại nhất cá hữu tự tự liệt trung tiến hành nhị phân tra trảo, phản hồi chỉ hướng đệ nhất cáĐại vu đẳng vuĐích nguyên tố đích vị trí đích điệt đại khí. Như quả bất tồn tại giá dạng đích nguyên tố, tắc phản hồi vĩ điệt đại khí.lower_bound(v.begin(),v.end(),x).

  • upper_bound:Tại nhất cá hữu tự tự liệt trung tiến hành nhị phân tra trảo, phản hồi chỉ hướng đệ nhất cáĐại vuĐích nguyên tố đích vị trí đích điệt đại khí. Như quả bất tồn tại giá dạng đích nguyên tố, tắc phản hồi vĩ điệt đại khí.upper_bound(v.begin(),v.end(),x).

    lower_boundHòaupper_boundĐích thời gian phục tạp độ

    Tại nhất bàn đích sổ tổ lí, giá lưỡng cá hàm sổ đích thời gian phục tạp độ quân vi,Đãn tạisetĐẳng quan liên thức dung khí trung, trực tiếp điều dụnglower_bound(s.begin(),s.end(),val)Đích thời gian phục tạp độ thịĐích.

    setĐẳng quan liên thức dung khí trung dĩ kinh phong trang liễulower_boundĐẳng hàm sổ ( tượngs.lower_bound(val)Giá dạng ), giá dạng điều dụng đích thời gian phục tạp độ thịĐích.

  • next_permutation:Tương đương tiền bài liệt canh cải viToàn bài liệt trung đích hạ nhất cá bài liệt.Như quả đương tiền bài liệt dĩ kinh thịToàn bài liệt trung đích tối hậu nhất cá bài liệt( nguyên tố hoàn toàn tòng đại đáo tiểu bài liệt ), hàm sổ phản hồifalseTịnh tương bài liệt canh cải viToàn bài liệt trung đích đệ nhất cá bài liệt( nguyên tố hoàn toàn tòng tiểu đáo đại bài liệt ); phủ tắc, hàm sổ phản hồitrue.next_permutation(v.begin(), v.end())Hoặcnext_permutation(v + begin, v + end).

  • prev_permutation:Tương đương tiền bài liệt canh cải viToàn bài liệt trung đích thượng nhất cá bài liệt.Dụng pháp đồngnext_permutation.

  • partial_sum:Cầu tiền chuế hòa. Thiết nguyên dung khí vi,Mục tiêu dung khí vi,Tắc lệnh.partial_sum(src.begin(), src.end(), back_inserter(dst)).

Sử dụng dạng lệ

  • Sử dụngnext_permutationSinh thànhĐáoĐích toàn bài liệt. Lệ đề:Luogu P1706 toàn bài liệt vấn đề

    Thật hiện
    1
    2
    3
    4
    5
    intN=9,a[]={1,2,3,4,5,6,7,8,9};
    do{
    for(inti=0;iN;i++)couta[i]"";
    coutendl;
    }while(next_permutation(a,a+N));
    
    • Sử dụnglower_boundDữupper_boundTra trảo hữu tự sổ tổTrung tiểu vu,Đẳng vu,Đại vuNguyên tố đích phân giới tuyến.
    Thật hiện
    1
    2
    3
    4
    5
    intN=10,a[]={1,1,2,4,5,5,7,7,9,9},x=5;
    inti=lower_bound(a,a+N,x)-a,j=upper_bound(a,a+N,x)-a;
    // a[0] ~ a[i - 1] vi tiểu vu x đích nguyên tố, a[i] ~ a[j - 1] vi đẳng vu x đích nguyên tố,
    // a[j] ~ a[N - 1] vi đại vu x đích nguyên tố
    couti""jendl;
    
    • Sử dụngpartial_sumCầu giảiTrung nguyên tố đích tiền chuế hòa, tịnh tồn trữ vuTrung.
    Thật hiện
    1
    2
    3
    4
    5
    vectorint>src={1,2,3,4,5},dst;
    // cầu giải src trung nguyên tố đích tiền chuế hòa, dst[i] = src[0] +... + src[i]
    // back_inserter hàm sổ tác dụng tại dst dung khí thượng, đề cung nhất cá điệt đại khí
    partial_sum(src.begin(),src.end(),back_inserter(dst));
    for(unsignedinti=0;idst.size();i++)coutdst[i]"";
    
    • Sử dụnglower_boundTra trảo hữu tự sổ tổTrung tối tiếp cậnĐích nguyên tố. Lệ đề:UVa10487 Closest Sums
    Thật hiện
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    intN=10,a[]={1,1,2,4,5,5,8,8,9,9},x=6;
    // lower_bound tương phản hồi a trung đệ nhất cá đại vu đẳng vu x đích nguyên tố đích địa chỉ, kế toán xuất đích i vi kỳ hạ tiêu
    inti=lower_bound(a,a+N,x)-a;
    // tại dĩ hạ lưỡng chủng tình huống hạ, a[i] (a trung đệ nhất cá đại vu đẳng vu x đích nguyên tố ) tức vi đáp án:
    // 1. a trung tối tiểu đích nguyên tố đô đại vu đẳng vu x;
    // 2. a trung tồn tại đại vu đẳng vu x đích nguyên tố, thả đệ nhất cá đại vu đẳng vu x đích nguyên tố (a[i])
    // tương bỉ vu đệ nhất cá tiểu vu x đích nguyên tố (a[i - 1]) canh tiếp cận x;
    // phủ tắc, a[i - 1] (a trung đệ nhất cá tiểu vu x đích nguyên tố ) tức vi đáp án
    if(i==0||(iN&&a[i]-xx-a[i-1]))
    couta[i];
    else
    couta[i-1];
    
    • Sử dụngsortDữuniqueTra trảo sổ tổTrungĐệTiểu đích trị( chú ý: Trọng phục xuất hiện đích trị cận toán nhất thứ, nhân thử bổn đề bất thị cầu giải đệTiểu đích nguyên tố ). Lệ đề:Luogu P1138 đệ k tiểu chỉnh sổ
    Thật hiện
    1
    2
    3
    4
    5
    intN=10,a[]={1,3,3,7,2,5,1,2,4,6},k=3;
    sort(a,a+N);
    // unique tương phản hồi khứ trọng chi hậu sổ tổ tối hậu nhất cá nguyên tố chi hậu đích địa chỉ, kế toán xuất đích cnt vi khứ trọng hậu sổ tổ đích trường độ
    intcnt=unique(a,a+N)-a;
    couta[k-1];