如何使用 std::transform 抛出越界写入异常?

切尔

我有以下代码将 a 复制std::vector a到 another 中std::vector b,但以 2 作为起始索引。由于两个向量的长度都是 4,这会导致越界写入。我想让这段代码抛出异常,但我该怎么做呢?下面的代码因分段错误而崩溃。

#include <vector>
#include <iostream>

int main()
{
    std::vector<double> a = {1, 2, 3, 4};
    std::vector<double> b(4);

    try
    {
        std::transform(a.begin(), a.begin()+4, b.begin()+2,
                [](const double d) { return d; });
    }
    catch (std::exception& e)
    {
        std::cout << "EXCEPTION: " << e.what() << std::endl;
        return 1;
    }

    return 0;
}
阿舍普勒

std::transform 假设 [d_first, d_first+std::distance(first1, last1))是有效的。

但是您可以编写自己的算法,如果您还向输出范围添加“结束”迭代器:

template <typename InputIt, typename OutputIt, typename UnaryOp>
OutputIt safe_transform(
   InputIt first1, InputIt last1,
   OutputIt first2, OutputIt last2,
   UnaryOp unary_op )
{
    while ( first1 != last1 ) {
        if ( first2 == last2 )
            throw std::domain_error( "Reached end of output range" );
        *first2 = unary_op( *first1 );
        ++first1;
        ++first2;
    }
    return first2;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用std :: transform进行计算

来自分类Dev

使用std :: get作为std :: transform的参数

来自分类Dev

如何正确使用std :: transform和std :: mem_fn?

来自分类Dev

boost :: transform与std :: transform

来自分类Dev

C ++在结构向量上使用std :: transform

来自分类Dev

C++中std::transform的使用问题

来自分类Dev

std :: transform和std :: plus如何协同工作?

来自分类Dev

使用std :: transform将std :: vector容器转换为std :: set

来自分类Dev

如何消除并行std :: transform_reduce()的中间容器?

来自分类Dev

使用自己的迭代器,Visual Studio中的std :: transform失败

来自分类Dev

我可以在并行执行策略中使用std :: transform吗?

来自分类Dev

使用自己的迭代器,Visual Studio中的std :: transform失败

来自分类Dev

与std :: transform等效的元组

来自分类Dev

std :: transform订单保证

来自分类Dev

重载std :: transform算法

来自分类Dev

'transform': 不是 'std' 的成员

来自分类Dev

使用std :: bind从BinaryPredicate中创建一个UnaryPredicate,以用于std :: transform

来自分类Dev

为什么我不能在std :: transform中使用std :: get <0>?

来自分类Dev

如何修复越界异常错误?

来自分类Dev

std :: regex构造抛出异常

来自分类Dev

向量添加赋值与`std :: transform`

来自分类Dev

std :: transform在临时对象上

来自分类Dev

std :: transform在临时对象上

来自分类Dev

std :: abs与std :: transform不起作用

来自分类Dev

我应该使用 std::cerr 和 exit() 而不是抛出异常吗?

来自分类Dev

在std :: unique_ptr的向量上使用make_transform_iterator获取const指针

来自分类Dev

为什么使用std :: transform会导致exc_bad_access

来自分类Dev

数组索引越界异常如何克服

来自分类Dev

线程创建C ++ std :: thread抛出异常

Related 相关文章

  1. 1

    如何使用std :: transform进行计算

  2. 2

    使用std :: get作为std :: transform的参数

  3. 3

    如何正确使用std :: transform和std :: mem_fn?

  4. 4

    boost :: transform与std :: transform

  5. 5

    C ++在结构向量上使用std :: transform

  6. 6

    C++中std::transform的使用问题

  7. 7

    std :: transform和std :: plus如何协同工作?

  8. 8

    使用std :: transform将std :: vector容器转换为std :: set

  9. 9

    如何消除并行std :: transform_reduce()的中间容器?

  10. 10

    使用自己的迭代器,Visual Studio中的std :: transform失败

  11. 11

    我可以在并行执行策略中使用std :: transform吗?

  12. 12

    使用自己的迭代器,Visual Studio中的std :: transform失败

  13. 13

    与std :: transform等效的元组

  14. 14

    std :: transform订单保证

  15. 15

    重载std :: transform算法

  16. 16

    'transform': 不是 'std' 的成员

  17. 17

    使用std :: bind从BinaryPredicate中创建一个UnaryPredicate,以用于std :: transform

  18. 18

    为什么我不能在std :: transform中使用std :: get <0>?

  19. 19

    如何修复越界异常错误?

  20. 20

    std :: regex构造抛出异常

  21. 21

    向量添加赋值与`std :: transform`

  22. 22

    std :: transform在临时对象上

  23. 23

    std :: transform在临时对象上

  24. 24

    std :: abs与std :: transform不起作用

  25. 25

    我应该使用 std::cerr 和 exit() 而不是抛出异常吗?

  26. 26

    在std :: unique_ptr的向量上使用make_transform_iterator获取const指针

  27. 27

    为什么使用std :: transform会导致exc_bad_access

  28. 28

    数组索引越界异常如何克服

  29. 29

    线程创建C ++ std :: thread抛出异常

热门标签

归档