【c++ 容器 算法学习】


static_cast dynamic_cast const_cast reinterpret_cast

隐式类型转换:当编译器自动将一种类型转换为另一种类型时,称为隐式类型转换。例如,将一个整数赋值给一个浮点数变量时,编译器会自动将整数转换为浮点数。

显式类型转换:当程序员明确指定将一种类型转换为另一种类型时,称为显式类型转换。在C++中,有四种显式类型转换运算符:static_castdynamic_castconst_castreinterpret_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 
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【网络星空】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值