C++那些让我们偷懒的函数

在这里插入图片描述

欢迎来到Cefler的博客
博客主页:那个传说中的man的主页
个人专栏:题目解析
推荐文章:题目大解析(3)


前言
让我们康康c++为我们提供的懒人函数吧,后续会不间断补充。


目录

  • max_element
  • min_element
  • std::stoi
  • std::set_intersection

max_element

使用std::max_element函数找到容器中的最大元素:

#include 
#include 
#include 

int main() {
    std::vector<int> numbers = {5, 3, 8, 2, 9, 1};
    
    auto maxElement = std::max_element(numbers.begin(), numbers.end());
    
    std::cout << "最大值是:" << *maxElement << std::endl;
    
    return 0;
}

min_element

std::min函数是C++标准库中用于比较两个值并返回较小值的函数。这个函数有两个版本,一个接受两个参数,另一个接受一个序列(容器)作为参数。

  1. std::min函数接受两个参数,用于比较两个值的大小,并返回较小的那个值。它可以用于大多数内置类型和用户定义的类型,只要该类型支持小于运算符(<)。
#include 
#include 

int main() {
    int a = 10;
    int b = 20;
    
    int minValue = std::min(a, b); // 返回10
    
    double x = 3.14;
    double y = 2.71;
    
    double minDoubleValue = std::min(x, y); // 返回2.71
    
    return 0;
}
  1. std::min函数还可以接受一个序列(容器),用于查找序列中的最小值,并返回该值。它需要两个迭代器作为参数,分别表示序列的起始位置和结束位置。
#include 
#include 
#include 

int main() {
    std::vector<int> numbers = {5, 3, 8, 2, 9, 1};
    
    auto minValue = std::min_element(numbers.begin(), numbers.end()); // 返回1
    
    return 0;
}

上述代码中,std::min_element函数查找numbers容器中的最小值,并返回一个迭代器,该迭代器指向最小值所在的位置。

需要注意的是

std::min_element函数返回的是一个迭代器,用于指向容器中的最小元素。因为容器中的元素类型可能各不相同,所以无法事先确定返回值的具体类型。为了方便,我们可以使用auto关键字将返回值的类型推断出来。

auto是C++11引入的关键字,用于自动推断变量的类型。通过使用auto关键字,编译器会根据初始化表达式的类型来推断变量的类型,省去了显式指定变量类型的麻烦。

在上述代码中,std::min_element返回的迭代器可以指向任何类型的元素,因此我们不确定具体的类型是什么。为了方便编写代码并保持代码的通用性,我们可以使用auto关键字来让编译器自动推断返回值的类型。

#include 
#include 
#include 

int main() {
    std::vector<int> numbers = {5, 3, 8, 2, 9, 1};
    
    auto minValue = std::min_element(numbers.begin(), numbers.end()); // 返回1
    
    return 0;
}

在上述代码中,minValue的类型会被自动推断为std::vector::iterator,这是由于numbers容器是std::vector类型,并且std::min_element返回的是该容器的迭代器。

使用auto关键字可以简化代码,并且使代码更加通用和易读。当我们不确定变量的具体类型时,使用auto是一个很好的选择。

std::stoi

在C++中,可以使用std::stoi()函数将std::string类型的对象转换为整数。

#include 
#include 

int main() {
    std::string str = "12345";
    
    int num = std::stoi(str);
    
    std::cout << "Converted number: " << num << std::endl;
    
    return 0;
}

在上述代码中,我们将字符串"12345"赋值给std::string对象str,然后使用std::stoi()将其转换为整数,并将结果赋值给num变量。最后,通过输出流std::cout打印出转换后的整数结果。

需要注意的是,std::stoi()函数在转换过程中会忽略字符串前导的空格,并且如果字符串中有非数字字符,则转换会停止并返回有效数字部分。如果无法转换为整数,则会抛出std::invalid_argumentstd::out_of_range异常。

另外,还有其他类似的函数可以将std::string转换为其他类型,比如std::stol()用于长整型、std::stof()用于单精度浮点型、std::stod()用于双精度浮点型等。这些函数都属于C++标准库的一部分,可以在头文件中找到它们的声明。


std::stoi()函数会忽略整数字符串前方的空格并将其作为有效数字部分进行解析。因此,如果传入的字符串是"00123",它会被解析成整数123,转换成功。

下面是一个例子:

#include 
#include 

int main() {
    std::string str = "00123";
    
    int num = std::stoi(str);
    
    std::cout << "Converted number: " << num << std::endl;
    
    return 0;
}

输出:

Converted number: 123

需要注意的是,如果字符串前方有非零数字的前导零,则会被忽略。比如字符串"0123"会被解析成整数123,而不是123

std::set_intersection

C++标准库提供了多种从两个容器中找交集的函数,其中一个常用的函数是std::set_intersection。这个函数可用于查找两个有序容器(如std::vectorstd::setstd::map)中的交集,并将结果放入一个输出迭代器所指定的位置。下面是一段使用std::set_intersection函数的示例代码:

#include 
#include 
#include 

int main() {
    std::vector<int> vec1 = {1, 2, 3, 4, 5};
    std::vector<int> vec2 = {3, 4, 5, 6, 7};
    std::vector<int> intersection;

    std::set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), std::back_inserter(intersection));

    std::cout << "Intersection: ";
    for (const auto& num : intersection) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

上述代码首先创建了两个向量vec1vec2,并初始化它们为{1, 2, 3, 4, 5}{3, 4, 5, 6, 7}

然后,我们创建了一个名为intersection的向量来存储两个向量之间的交集。接着,我们使用std::set_intersection函数将两个向量的交集放入intersection向量中。

最后,我们输出交集的值。

输出:

Intersection: 3 4 5 

需要注意的是,为了使用std::set_intersection函数,两个容器必须是有序的,也就是说,它们内部的元素已经排好序了。如果容器中的元素没有排序,则必须首先对它们进行排序操作。

另外,需要指定一个输出迭代器来存储交集元素。在上述代码中,我们使用std::back_inserter函数和intersection向量的begin函数来创建一个输出迭代器,它会将数据插入intersection向量的尾部。你也可以使用其他类型的输出迭代器来保存结果。

你可能感兴趣的:(C++,c++,开发语言,函数)