📜  C++中的琐碎类(1)

📅  最后修改于: 2023-12-03 15:29:54.609000             🧑  作者: Mango

C++中的琐碎类

在C++中,类是一种封装数据和函数的方式,可以创建对象来存储和操作数据。除了常规的类,C++中还有许多琐碎的类,它们可能不那么被人熟知,但对于程序员来说也是非常重要的。

std::pair

std::pair 是一个模板类,用于将两个值组合成一个值对,这两个值可以是不同的类型。它通常被用于将一对值传递给函数或返回包含两个值的函数。使用 std::make_pair 函数可以更加方便地创建一个值对。

#include <iostream>
#include <utility>

int main() {
  std::pair<int, int> p1(1, 2);
  std::pair<int, char> p2(3, 'a');
  std::pair<int, std::string> p3(4, "hello");

  std::cout << p1.first << " " << p1.second << std::endl;
  std::cout << p2.first << " " << p2.second << std::endl;
  std::cout << p3.first << " " << p3.second << std::endl;

  auto p4 = std::make_pair(5, 6);
  std::cout << p4.first << " " << p4.second << std::endl;

  return 0;
}

输出:

1 2
3 a
4 hello
5 6
std::tuple

std::tuple 是一个模板类,它可以将多个值组合成一个值序列,每个值可以是不同的类型。它通常被用作返回多个值的函数的结果。

#include <iostream>
#include <tuple>

std::tuple<int, std::string, double> func() {
  return std::make_tuple(1, "hello", 3.14);
}

int main() {
  auto t = func();

  std::cout << std::get<0>(t) << " "
            << std::get<1>(t) << " "
            << std::get<2>(t) << std::endl;

  return 0;
}

输出:

1 hello 3.14
std::array

std::array 是一个模板类,它可以将固定数量的元素组合成一个数组,这个数量是在编译时确定的。它与C风格的数组相比,更加安全,因为它有内置的一些范围检查。

#include <iostream>
#include <array>

int main() {
  std::array<int, 3> arr1{1, 2, 3};
  std::array<std::string, 2> arr2{{"hello", "world"}};

  std::cout << "arr1:";
  for (auto x : arr1) {
    std::cout << " " << x;
  }
  std::cout << std::endl;

  std::cout << "arr2:";
  for (auto x : arr2) {
    std::cout << " " << x;
  }
  std::cout << std::endl;

  return 0;
}

输出:

arr1: 1 2 3
arr2: hello world
std::bitset

std::bitset 是一个模板类,它可以将多个二进制位组合成一个容器,可以进行位操作。它通常被用于实现一些位操作的算法,例如剪枝。

#include <iostream>
#include <bitset>

int main() {
  std::bitset<8> bits1(170);
  std::bitset<8> bits2("10101010");
  std::bitset<8> bits3 = bits1 & bits2;

  std::cout << bits1 << std::endl;
  std::cout << bits2 << std::endl;
  std::cout << bits3 << std::endl;

  return 0;
}

输出:

10101010
10101010
10101010
std::function

std::function 是一个模板类,它可以将任意类型的可调用对象(如函数、Lambda、函数对象等)打包成一个对象。它通常被用于实现回调函数、委托和事件等。

#include <iostream>
#include <functional>

int add(int a, int b) {
  return a + b;
}

int main() {
  std::function<int (int, int)> f1 = add;  // function pointer
  std::function<int (int)> f2 = [](int x) { return x * 2; };  // lambda
  std::function<int (int)> f3 = std::negate<int>();  // function object

  std::cout << f1(1, 2) << std::endl;
  std::cout << f2(3) << std::endl;
  std::cout << f3(4) << std::endl;

  return 0;
}

输出:

3
6
-4
总结

以上介绍了C++中的一些琐碎类,它们虽不如常规类那么被人熟知,但对于程序员来说也是非常重要的。通过学习它们的使用方法,可以更好地解决实际问题。