竞赛中,c++常用的库函数

目录

万能头文件:

大小写转换

islower/isupper函数

tolower/toupper函数

ASCII码

二分查找

binary_search函数

 lower_bound和upper_bound函数

1.lower_bound函数:

2.upper_bound函数:

排序

sort函数

全排列

next_permutation()函数

prev_permutation()函数

最值查找

min和max

min_element和max_element

其他函数

memset

swap()

reverse()

unique()去重函数


万能头文件:

#include

大小写转换

islower/isupper函数

islower判断是否是小写字母,是则返回1,不是就返回0.

isupper判断是否是小写字母,是则返回1,不是就返回0.

#include

int main() 
{
    char ch = 'a';
    
    if (islower(ch)) 
	{
        printf("%c is a lowercase letter\n", ch);
    } else 
	{
        printf("%c is not a lowercase letter\n", ch);
    }
    
    ch = 'B';
    
    if (isupper(ch)) 
	{
        printf("%c is an uppercase letter\n", ch);
    } else 
	{
        printf("%c is not an uppercase letter\n", ch);
    }
    
    return 0;
}

输出结果为:

a is a lowercase letter
B is an uppercase letter

注意:islowerisupper函数只用于判断单个字符是否为小写字母或大写字母,不适用于判断字符串。

tolower/toupper函数

tolower函数的原型为:

int tolower(int c);

它接受一个int类型的参数,通常是一个字符的ASCII码,如果该字符是大写字母(A-Z),则返回对应的小写字母;否则保持不变。这个函数主要用于将大写字母转换为小写字母。

toupper函数的原型为:

int toupper(int c);

它同样接受一个int类型的参数,通常是一个字符的ASCII码,如果该字符是小写字母(a-z),则返回对应的大写字母;否则保持不变。这个函数主要用于将小写字母转换为大写字母。

#include


int main() 
{
    char ch = 'A';
    
    printf("Lowercase of %c is %c\n", ch, tolower(ch));
    
    ch = 'b';
    
    printf("Uppercase of %c is %c\n", ch, toupper(ch));
    
    return 0;
}

输出结果为:

Lowercase of A is a
Uppercase of b is B

注意:tolowertoupper函数只用于单个字符的大小写转换,不适用于字符串。

ASCII码

0是第48位,A是65,a是97


二分查找

库函数只能对数组进行二分查找。

前提是数组是单增或者是单减的。

binary_search函数

下面是binary_search函数的一般用法:

bool binary_search(ForwardIt first, ForwardIt last, const T& value);

参数说明:

  • firstlast:表示容器或容器的一部分的迭代器范围。搜索范围包括[first, last),即[first, last)是一个左闭右开的区间。
  • value:要搜索的特定值。

函数返回布尔值,指示是否找到指定的值。如果找到了指定值,则返回true;否则返回false

#include 
#include 
#include 

int main() 
{
    std::vector nums = { 1, 2, 3, 4, 4, 6, 7, 8, 9 };

    int target = 5;

    bool found = std::binary_search(nums.begin(), nums.end(), target);

    if (found) {
        std::cout << "The value " << target << " is found." << std::endl;
    }
    else {
        std::cout << "The value " << target << " is not found." << std::endl;
    }

    return 0;
}

竞赛中,c++常用的库函数_第1张图片

 lower_bound和upper_bound函数

1.lower_bound函数:

lower_bound函数的原型如下:

template ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value);

lower_bound函数接受三个参数:

  • firstlast:表示容器或容器的一部分的迭代器范围。
  • value:表示要查找的值。

lower_bound函数返回一个迭代器,指向第一个不小于指定值的元素。如果找不到这样的元素,它将返回last迭代器。

2.upper_bound函数:

upper_bound函数的原型如下:

template ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T& value);

upper_bound函数接受三个参数:

  • firstlast:表示容器或容器的一部分的迭代器范围。
  • value:表示要查找的值。

upper_bound函数返回一个迭代器,指向第一个大于指定值的元素。

排序

sort函数

格式:sort(起始位置,结束位置的下一位,*比较函数可写或可不写(默认用小于比较))。

下面是一个示例代码,演示了如何使用sort函数对一个向量中的元素进行排序:

#include 
#include 
#include 

int main() 
{
    std::vector nums = {5, 3, 9, 1, 7};

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

    for (int num : nums) 
    {
        std::cout << num << " ";
    }
    
    std::cout << std::endl;

    return 0;
}

在这个示例中,我们定义了一个向量nums,并使用sort函数对其进行排序。通过调用sort(nums.begin(), nums.end()),我们对整个向量进行升序排序。然后,通过遍历向量输出排序后的元素。输出结果为1 3 5 7 9,表示向量中的元素已按升序排序。

需要注意的是,sort函数的实现使用的是快速排序(Quick Sort)算法或归并排序(Merge Sort)算法,具体实现可能因编译器和平台而异。此外,sort函数还提供其他重载形式,可以自定义排序规则,例如自定义比较函数或自定义排序对象的operator<


全排列

next_permutation()函数

下面是一个示例代码,演示了如何使用next_permutation()函数生成给定序列的所有排列:

#include 
#include 
#include 

int main() 
{
    std::vector nums = {1, 2, 3};

    // 输出初始序列
    std::cout << "初始序列:";
    for (int num : nums) 
    {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 生成所有排列
    do {
        // 输出当前排列
        for (int num : nums) 
        {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    } while (std::next_permutation(nums.begin(), nums.end()));

    return 0;
}

输出结果如下:

初始序列:1 2 3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

按字典序进行排序,从小到大。

prev_permutation()函数

与next_permutation()相似,从大到小排序。

最值查找

min和max

min(a,b)返回a和b中较小的那个值,只能传入两个值,或者一个列表。

例如:

min(3,5)=3

min({1,2,3,4})=1

max同理,返回最大值。

min_element和max_element

min_element函数接受两个迭代器参数,表示容器的范围。它会返回指向容器中最小元素的迭代器。如果有多个最小元素,它将返回第一个最小元素的迭代器。

#include 
#include 
#include 

int main() 
{
    std::vector nums = {5, 3, 2, 7, 9, 1};
    
    auto it = std::min_element(nums.begin(), nums.end());
    
    std::cout << "Min element: " << *it << std::endl;
    
    return 0;
}

 max_element同理。


其他函数

memset

memset(arr,0,sizeof(arr))将数组arr的所有元素设置为0.

注意:memset()函数对于非字符类型的数组可能会产生未定义的行为。

swap()

swap(&a,&b)

swap()函数可以用于交换任意类型的变量。

reverse()

reverse()是一个用于反转容器中元素顺序的函数。

void reverse(开始,结尾)

unique()去重函数

unique()函数是C++标准库中的一个函数,用于去除容器中相邻的重复元素(尽量先排序),并返回一个指向新的"尾后"(beyond-the-end)元素的迭代器。此函数适用于大多数的容器类型,如vector、list和deque等。

以下是一个使用unique()函数去重vector容器的示例:

#include 
#include 
#include 

int main() {
    std::vector nums = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};

    // 使用unique函数去重
    auto it = std::unique(nums.begin(), nums.end());

    // 擦除重复元素后的容器大小
    nums.erase(it, nums.end());

    // 打印去重后的容器
    for (int num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

1 2 3 4

在这个示例中,我们创建了一个vector容器nums,其中包含了多个重复的元素。然后,我们使用std::unique(nums.begin(), nums.end())函数将容器中的重复元素移动到末尾,并返回一个指向新的"尾后"元素的迭代器。接着,我们使用nums.erase(it, nums.end())函数来擦除重复元素后的部分,并更新容器大小。最后,我们使用循环打印出去重后的容器。

你可能感兴趣的:(刷题之旅,c++,开发语言)