文章目录
static_cast dynamic_cast const_cast reinterpret_cast
隐式类型转换
:当编译器自动将一种类型转换为另一种类型时,称为隐式类型转换。例如,将一个整数赋值给一个浮点数变量时,编译器会自动将整数转换为浮点数。
显式类型转换
:当程序员明确指定将一种类型转换为另一种类型时,称为显式类型转换。在C++中,有四种显式类型转换运算符:static_cast
、dynamic_cast
、const_cast
和reinterpret_cast
。
static_cast
:用于基本的类型转换,如将整数转换为浮点数,指针转换为整数等。它可以在编译期进行类型检查,但不能用于没有继承关系的类之间的转换。
dynamic_cast
:用于在继承关系中的类型转换。它会在运行时进行类型检查,如果转换不安全,则返回nullptr或抛出异常。
const_cast
:用于去除变量的const或volatile属性。它可以用于修改常量对象的值,但需要谨慎使用,因为违反了const的语义。
reinterpret_cast
:用于将一个指针或引用转换为另一个不相关的类型。它没有类型检查,因此非常危险,可能导致未定义的行为。
std::back_inserter
使用C++标准库中的std::back_inserter进行迭代器插入
C++标准库中的容器提供了许多有用的工具,其中就包括了std::back_inserter。这个工具可以用来在容器的末尾插入一个元素,并且不会改变容器的顺序。这对于需要保证迭代器位置正确性的场景非常有用。本文将会详细介绍如何使用std::back_inserter。
std::back_inserter的使用非常简单。首先,我们需要包含和头文件。然后,我们可以在算法中使用std::back_inserter。例如:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> v{
1, 2, 3};
// 使用std::back_inserter在末尾插入4
std::back_inserter(v.end(), 4);
for (int x : v) {
std::cout << x << ' ';
}
return 0;
}
输出结果为:4 1 2 3。可以看到,std::back_inserter成功地插入了元素4,并且没有改变容器中元素的顺序。
数组初始化vector
int arr[] = {
1, 2, 3, 4, 5};
std::vector<int> vec(std::begin(arr), std::end(arr));
int arr[] = {
1, 2, 3, 4, 5};
std::vector<int> vec(std::begin(arr), std::begin(arr) + sizeof(arr) / sizeof(arr[0]));
int arr[] = {
1, 2, 3, 4, 5};
std::vector<int> vec = {
1, 2, 3, 4, 5};
int arr[] = {
1, 2, 3, 4, 5};
std::vector<int> vec{
std::begin(arr), std::end(arr)};
std::valarray std::vector互转
#include <iostream>
#include <vector>
#include <valarray>
// 将 std::vector 转换为 std::valarray
template<typename T>
std::valarray<T> vectorToValarray(const std::vector<T>& vec) {
return std::valarray<T>(vec.data(), vec.size());
}
// 将 std::valarray 转换为 std::vector
template<typename T>
std::vector<T> valarrayToVector(const std::valarray<T>& va) {
return std::vector<T>(va.begin(), va.end());
}
int main() {
// 示例:转换 std::vector 和 std::valarray
std::vector<int> vec = {
1, 2, 3, 4, 5};
std::valarray<int> va = vectorToValarray(vec);
// 输出转换后的 std::valarray 的内容
for (int i : va) {
std::cout << i << ' ';
}
std::cout << std::endl;
// 将 std::valarray 转换回 std::vector
std::vector<int> vec2 = valarrayToVector(va);
// 输出转换回的 std::vector 的内容
for (int i