C++ 标准库中的 sort 函数是一个非常常用的函数,用来对序列进行排序。它位于头文件 <algorithm> 中。sort 函数使用了一种混合了快速排序、插入排序和堆排序的算法(通常是 introsort),在最坏情况下的时间复杂度为 O(n log n),而最好的情况下是 O(n log n) 或 O(n)。

函数签名:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

参数解释:

  1. firstlast:这两个参数是迭代器,表示要排序的范围。first 是序列的开始迭代器,last 是序列的结束迭代器,排序的范围为 [first, last),注意 last 是不包含在排序范围内的。
    例如:sort(dp,dp+n) 、第一个参数就是从dp[0]开始,第二个参数表示到dp[n-1]结束,又例如 sort(dp+1,dp+7)、就是表示对从dp[1]开始 dp[6]结束的元素进行排序。
  2. Compare(可选):这是一个二元比较函数,定义排序规则。如果不提供该参数,默认是按升序排序(使用 < 运算符)。如果你想自定义排序规则,例如降序或基于某个属性排序,可以传入这个函数对象。

示例代码:

1. 基本使用(升序排序)

#include <iostream>
#include <algorithm>  // 包含 sort 函数
#include <vector>

int main() {
    std::vector<int> nums = {4, 2, 8, 5, 7, 1};
    
    // 使用默认的升序排序
    std::sort(nums.begin(), nums.end());
    
    std::cout << "Sorted in ascending order: ";
    for (int n : nums) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

Sorted in ascending order: 1 2 4 5 7 8

2. 自定义比较函数(降序排序)

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums = {4, 2, 8, 5, 7, 1};
    
    // 使用自定义的降序比较函数
    std::sort(nums.begin(), nums.end(), std::greater<int>());
    
    std::cout << "Sorted in descending order: ";
    for (int n : nums) {
        std::cout << n << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

Sorted in descending order: 8 7 5 4 2 1

自定义比较函数

你可以定义一个自己的比较函数来排序。例如,假设我们有一个自定义的结构体,并且想要基于某个字段进行排序:

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

struct Person {
    std::string name;
    int age;
};

// 自定义比较函数,按 age 排序
bool compareByAge(const Person& a, const Person& b) {
    return a.age < b.age;  // 按年龄升序
}

int main() {
    std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}};
    
    // 使用自定义比较函数排序
    std::sort(people.begin(), people.end(), compareByAge);
    
    std::cout << "Sorted by age: \n";
    for (const Person& person : people) {
        std::cout << person.name << ": " << person.age << "\n";
    }

    return 0;
}

输出:

Sorted by age: 
Bob: 25
Alice: 30
Charlie: 35

总结:

  • C++ 的 sort 函数提供了灵活的排序功能,既可以使用默认的升序排序,也可以通过自定义比较函数实现各种自定义排序逻辑。
  • sort 适用于随机访问迭代器,因此可以对 std::vectorstd::array 等容器进行排序。
  • 如果你需要保持元素之间的顺序不变(例如对于相同的元素),可以使用 stable_sort,它是稳定排序,能保持相同元素的原有顺序。

调和级数(Harmonic Series)是一种数学级数,它的形式为:

1
即:调和级数的第 n 项为前 n 个倒数的和。

特点:

  1. 发散性:虽然调和级数中的每一项(从第二项开始)都越来越小,但总和却没有上界,随着 n 越来越大,调和级数的和也会无限增大。因此调和级数是发散的,即没有一个有限的极限值。
  2. 应用:调和级数在数学分析、数论、概率论等领域都有应用,比如用于估算某些算法的时间复杂度等。

举例:

  • 当 n=1 时,调和级数的和为
  • 当 n=2 时,调和级数的和为
  • 当 n=3 时,调和级数的和为

调和级数增长速度:

虽然调和级数的每一项越来越小,但由于它是一个发散级数,尽管增长速度很慢,和仍然是无限大的。当 n 足够大时, 的值会逐渐逼近 (其中 γ\gammaγ 是欧拉常数,大约为 0.577)。

简单来说,调和级数是描述一连串倒数相加的数列,随着项数增加,虽然每项越来越小,但总和会逐渐变大。

之前是用的bpb面板,最近突然不行了。
所以我换了脚本,还是用回了勇哥的vless脚本。然后发现直接用的话大部分节点也是不行的。
后来经过了一系列的测试,发现可能是有些端口被禁用了。
还活着的只有20开头的,主要是2086这个端口可以用。
之后就是关于优选域名和ip了。
优选ip选择端口2086没有试过,之前一直测试的是8开头的端口比如8443,可以ping通,但是连不了,提示ssl不能验证。
优选域名是可以用的,但是不能开tls,然后在2086端口下测试也是有些可以用有些不能用,猜测是有些域名要么不再由cloudflare托管,要么就是有某种保护措施。
然后关于速度,速度差异也很明显。
首先,用电脑版nokebox测试几乎阵亡,基本是提示不可用,用v2rayN,则可以使用,其中最快的可以到达10m/s以上,最慢的在0.3m/s左右徘徊。另外nokebox虽然提示不可用,但是在实际测试时在v2rayN处可以使用的节点,在nokebox也可以使用。
手机版nokebox基本也是不可以,但是有几个是超时,就是说如果连上还是可以用的。测试之后确实连上后可以使用。
手机版v2rayng的测试很喜人,2086端口优选域名全部可以正常连接。

总结:现在要使用cloudflare搭建节点,需要使用优选域名开2086端口,优先使用v2rayn或nokebox客户端。

sub.heky.top订阅链接:https://sub.heky.top/src/php/sub.php?db=wky&sub=

【深基2.例6】字母转换

题目描述

输入一个小写字母,输出其对应的大写字母。例如输入 q[回车] 时,会输出 Q。

输入格式

输出格式

样例 #1

样例输入 #1

q

样例输出 #1

Q

题解:

#include<stdio.h>
int main(){
    char a;
    scanf("%c",&a);
    printf("%c",a-('a'-'A'));
    return 0;
}

根据ASCII表,大写字母在小写字母前面,所以先用字母a作为标识,减去大写字母A,就是两个字母之间的差值,之后用传入的参数去减,然后小写字母就变成了大写字母。

如果已经知道差值是32,也可以直接减去32,就像下面这个这样。

#include<stdio.h>
int main(){
    char a;
    scanf("%c",&a);
    printf("%c",a-32);
    return 0;
}

附件:ASCII表
ASCII