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

普拉纳夫·乔杜里

在解决与运算符重载相关的问题时,我遇到了一个问题。我现在将描述问题的具体情况。

代码包含一个名为的类Matrix,定义如下:

class Matrix {
   public:
    std::vector<std::vector<int>> a;
    friend Matrix operator+(const Matrix& x, const Matrix& b);
};

我应该通过重载+运算符来找到两个矩阵的相加

最初,我决定使用该transform函数来执行两个矩阵的相加,并提出了以下代码,该代码不会为所有测试用例生成正确答案,

Matrix operator+(const Matrix& x, const Matrix& y) {
    Matrix result;
    result.a.reserve(x.a.size());
    for (size_t i = 0; i < x.a.size(); i++) {
        std::transform(x.a.at(i).begin(), x.a.at(i).end(), y.a.at(i).begin(),
                       std::back_inserter(result.a[i]), std::plus<int>());
    }
    return result;
}

因此,我被迫使用嵌套的 for 循环执行相同的任务,这会为所有测试用例生成正确的答案,如下所示:

Matrix operator+(const Matrix& x, const Matrix& y) {
    Matrix result;
    std::vector<int> vec;
    result.a.reserve(x.a.size());
    for (size_t i = 0; i < x.a.size(); i++) {
        vec.reserve(x.a.at(i).size());
        for (size_t j = 0; j < x.a.at(i).size(); j++) {
            vec.push_back(x.a.at(i).at(j) + y.a.at(i).at(j));
        }
        result.a.push_back(vec);
        vec.clear();
    }
    return result;
}

我没有看到transform版本有什么问题有人能指出代码中的错误吗?任何帮助表示赞赏。谢谢。

迈克尔·维克斯勒

未定义的行为。元素保留但未添加到向量中:

result.a.reserve(x.a.size()); // result.a is still empty
for (size_t i = 0; i < x.a.size(); i++) {
    std::transform(x.a.at(i).begin(), x.a.at(i).end(), y.a.at(i).begin(),
                   std::back_inserter(result.a[i] /* UB */ ), std::plus<int>());
}

result.a.resize()改为打电话

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

C ++中std :: cin和isdigit的问题

来自分类常见问题

为什么在C ++ 14中对lambda使用std :: bind?

来自分类Dev

如何使用std :: function在C ++中实现策略模式

来自分类Dev

“使用namespace:std;”的功能是什么?在C ++中?

来自分类Dev

在C ++中实现HashMap时如何使用std :: function

来自分类Dev

使用系统;在C#中与使用命名空间std; 在C ++中

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用 ?: as if 语句在 C++ 中的问题

来自分类Dev

在std :: ofstream中复制std :: cout(C ++)

来自分类Dev

现实生活中的应用程序中是否使用C ++中的某些std类?

来自分类Dev

关于std :: list C ++的问题

来自分类Dev

C ++ std :: list插入问题

来自分类Dev

C ++ std :: wofstream unicode问题。

来自分类Dev

在VSCode中调试C ++期间将输入传递给std :: cin的问题

来自分类Dev

C ++中的复合std :: istream

来自分类Dev

在C中模拟std :: bind

来自分类Dev

等价于C中的std :: pair

来自分类Dev

C ++中的std :: variant cout

来自分类Dev

代码中的C ++ STD错误

来自分类Dev

等价于C中的std :: pair

来自分类Dev

C++ 中的 std::erase

来自分类Dev

使用object中的方法使用std :: bind和std :: function.target调用C样式的函数地址

来自分类Dev

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

来自分类Dev

在C ++ STL中,如何使用regex_replace从std :: string中删除非数字字符?

来自分类Dev

比较#include并将C ++中的命名空间std与Python中的import一起使用

来自分类Dev

比较#include并将C ++中的命名空间std与Python中的import一起使用

来自分类Dev

我可以使用std :: vector <std :: vector <T >>表示C ++中的二维数组吗?

Related 相关文章

  1. 1

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

  2. 2

    C ++中std :: cin和isdigit的问题

  3. 3

    为什么在C ++ 14中对lambda使用std :: bind?

  4. 4

    如何使用std :: function在C ++中实现策略模式

  5. 5

    “使用namespace:std;”的功能是什么?在C ++中?

  6. 6

    在C ++中实现HashMap时如何使用std :: function

  7. 7

    使用系统;在C#中与使用命名空间std; 在C ++中

  8. 8

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

  9. 9

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

  10. 10

    使用 ?: as if 语句在 C++ 中的问题

  11. 11

    在std :: ofstream中复制std :: cout(C ++)

  12. 12

    现实生活中的应用程序中是否使用C ++中的某些std类?

  13. 13

    关于std :: list C ++的问题

  14. 14

    C ++ std :: list插入问题

  15. 15

    C ++ std :: wofstream unicode问题。

  16. 16

    在VSCode中调试C ++期间将输入传递给std :: cin的问题

  17. 17

    C ++中的复合std :: istream

  18. 18

    在C中模拟std :: bind

  19. 19

    等价于C中的std :: pair

  20. 20

    C ++中的std :: variant cout

  21. 21

    代码中的C ++ STD错误

  22. 22

    等价于C中的std :: pair

  23. 23

    C++ 中的 std::erase

  24. 24

    使用object中的方法使用std :: bind和std :: function.target调用C样式的函数地址

  25. 25

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

  26. 26

    在C ++ STL中,如何使用regex_replace从std :: string中删除非数字字符?

  27. 27

    比较#include并将C ++中的命名空间std与Python中的import一起使用

  28. 28

    比较#include并将C ++中的命名空间std与Python中的import一起使用

  29. 29

    我可以使用std :: vector <std :: vector <T >>表示C ++中的二维数组吗?

热门标签

归档