如何修改C++ boost multi array的元素数据类型?
实现方案
下面提供两种可行实现方式,你可以根据自己的实际需求选择:
方案1:无需转换整个矩阵(推荐,开销更低)
如果你的唯一目的是获取最大值,完全不需要额外构造int类型的二维矩阵,unsigned char到int属于安全隐式转换,直接对原矩阵调用std::max_element即可:
#include <algorithm> #include <boost/multi_array.hpp> // 你的原矩阵定义 boost::multi_array<unsigned char, 2> matrix; // 直接获取最大值,返回值自动转为int类型 int max_val = *std::max_element(matrix.begin(), matrix.end());
注:boost::multi_array的迭代器会按内存顺序遍历所有维度的元素,因此二维数组可以直接调用全局的
begin()和end()传入std::max_element,不需要拆分维度遍历。
方案2:显式转换为int类型二维矩阵
如果你后续还有其他需要用到boost::multi_array<int, 2>的操作,可以先完成全量类型转换再求最大值:
#include <algorithm> #include <boost/multi_array.hpp> boost::multi_array<unsigned char, 2> matrix; // 第一步:构造和原矩阵尺寸一致的int类型矩阵 boost::multi_array<int, 2> int_matrix(boost::extents[matrix.shape()[0]][matrix.shape()[1]]); // 第二步:逐元素完成类型转换 for (size_t row = 0; row < matrix.shape()[0]; ++row) { for (size_t col = 0; col < matrix.shape()[1]; ++col) { int_matrix[row][col] = static_cast<int>(matrix[row][col]); } } // 第三步:调用max_element获取最大值 int max_val = *std::max_element(int_matrix.begin(), int_matrix.end());
内容的提问来源于stack exchange,提问作者jelc
相关产品推荐
相关产品推荐

