C++ 标准库

C++ 标准库(Standard Template Library,STL)是 C++ 的核心组成部分,提供了一组丰富的工具和算法,以帮助开发者更高效地编写代码。

在 C++ 标准库中,

头文件包含了一些实用的工具类和函数,这些工具类和函数在编写高效、可读性强的代码时非常有用。

头文件定义了多种工具类和函数,它们主要用于简化编程任务,提高代码的可读性和可维护性,这些工具类和函数包括:

  • pair:一个包含两个元素的容器,通常用于存储和返回两个相关联的值。
  • make_pair:一个函数模板,用于创建 pair 对象。
  • swap:一个函数模板,用于交换两个对象的值。
  • forwardmove:用于完美转发和移动语义的函数模板。

语法

pair 类

pair 是一个模板类,可以存储两个不同类型的值。其基本语法如下:

#include 

std::pair p;

这里,T1T2 是两个不同的类型,p 是一个 pair 对象,包含两个元素:firstsecond

make_pair 函数

make_pair 是一个函数模板,用于创建 pair 对象。其基本语法如下:

#include 

auto p = std::make_pair(x, y);

这里,xy 是两个值,p 是一个 pair 对象,其 first 成员存储 xsecond 成员存储 y

swap 函数

swap 是一个函数模板,用于交换两个对象的值。其基本语法如下:

#include 

std::swap(a, b);

这里,ab 是两个对象,swap 函数将它们的值进行交换。

实例

使用 pair 和 make_pair

实例

#include
#include

int main() {
    // 使用 make_pair 创建 pair 对象
    auto p = std::make_pair(10, 20);

    // 输出 pair 对象的元素
    std::cout “First element: “ p.first std::endl;
    std::cout “Second element: “ p.second std::endl;

    return 0;
}

输出结果:

First element: 10
Second element: 20

使用 swap 函数

实例

#include
#include

int main() {
    int a = 5;
    int b = 10;

    std::cout “Before swap: a = “ a “, b = “ b std::endl;

    // 使用 swap 函数交换 a 和 b 的值
    std::swap(a, b);

    std::cout “After swap: a = “ a “, b = “ b std::endl;

    return 0;
}

输出结果:

Before swap: a = 5, b = 10
After swap: a = 10, b = 5

使用 move 函数

实例

#include
#include
#include

int main() {
    std::vectorint> v1 = {1, 2, 3, 4, 5};
    std::vectorint> v2 = std::move(v1);

    std::cout “v1 size: “ v1.size() std::endl; // v1 现在为空
    std::cout “v2 size: “ v2.size() std::endl; // v2 拥有 v1 的元素

    return 0;
}

使用 forward 函数

实例

#include
#include

void process(int& i) {
    std::cout “Lvalue reference to “ i std::endl;
}

void process(int&& i) {
    std::cout “Rvalue reference to “ i std::endl;
}

template typename T>
void forward_example(T&& t) {
    process(std::forwardT>(t));
}

int main() {
    int x = 10;
    forward_example(x);           // Lvalue reference
    forward_example(20);          // Rvalue reference
    forward_example(std::move(x));// Rvalue reference

    return 0;
}

std::declval 实例

实例

#include
#include
#include

struct MyClass {
    MyClass(int, double) {}
};

template typename T>
void test() {
    // 获取 T 的构造函数返回的类型,而不实际调用它
    using R = decltype(std::declvalT>()(1, 1.0));
    std::cout std::is_sameR, MyClass>::value std::endl;
}

int main() {
    testMyClass>(); // 输出 1 (true)

    return 0;
}

头文件是 C++ 标准库中一个非常有用的部分,它提供了多种工具类和函数,帮助开发者编写更简洁、更高效的代码。

本文来源于互联网:C++ 标准库