📅  最后修改于: 2023-12-03 15:29:54.609000             🧑  作者: Mango
在C++中,类是一种封装数据和函数的方式,可以创建对象来存储和操作数据。除了常规的类,C++中还有许多琐碎的类,它们可能不那么被人熟知,但对于程序员来说也是非常重要的。
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
是一个模板类,它可以将多个值组合成一个值序列,每个值可以是不同的类型。它通常被用作返回多个值的函数的结果。
#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
是一个模板类,它可以将固定数量的元素组合成一个数组,这个数量是在编译时确定的。它与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
是一个模板类,它可以将多个二进制位组合成一个容器,可以进行位操作。它通常被用于实现一些位操作的算法,例如剪枝。
#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
是一个模板类,它可以将任意类型的可调用对象(如函数、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++中的一些琐碎类,它们虽不如常规类那么被人熟知,但对于程序员来说也是非常重要的。通过学习它们的使用方法,可以更好地解决实际问题。