求两个向量之间的最大元素
Find max element between two vectors
我原以为下面的会起作用,但它只输出零。想法?
std::vector<int> a = { 1, 2, 3 };
std::vector<int> b = { 4, 5, 6 };
int max = *std::max(std::max(a.begin(), a.end()), std::max(b.begin(), b.end()));
std::cout << max;
您使用的是std::max
,它比较其参数。也就是说,它返回两个迭代器中较大的一个。
内部调用需要的是std::max_element
,它可以找到范围中的最大元素:
std::vector<int> a = { 1, 2, 3 };
std::vector<int> b = { 4, 5, 6 };
int max = std::max(*std::max_element(a.begin(), a.end()), *std::max_element(b.begin(), b.end()));
std::cout << max;
实时示例
正如@MikeSeymour在评论中正确指出的那样,上面的代码假设范围不是空的,因为它无条件地取消引用从std::max_element
返回的迭代器。如果其中一个范围为空,则返回的迭代器将是最后一个迭代器,不能取消引用。
这里有一种在空范围内表现合理的方法。如果其中一个范围为空,则仍然可以从另一个范围中获得最大值。如果两个范围都为空,则得到INT_MIN
。
auto op = [](int a, int b) { return std::max(a, b); }; // 1)
int m = std::reduce(begin(b), end(b),
std::reduce(begin(a), end(a), INT_MIN, op), op);
std::reduce
2)在这里更好,因为您想要一个值,而不是迭代器作为结果。
1)我们需要一个lambda包装器,因为我们不允许使用std::max
的地址
2)C++-17之前,您可以使用std::accumulate
int m = std::max(std::max_element(a.begin(), a.end()), std::max_element(b.begin(), b.end()));
这样可以找到单个向量的最大值中的最大值。例如,对于第一个矢量{1,2,3},最大值为3,而对于第二个矢量{4,5,6},最大数值为6,3和6的最大值现在为6
相关文章:
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 比较它们之间的元素并获取公共值的键
- 查找多个向量之间的公共元素(无整数元素)
- 常量映射和常量元素映射之间的区别
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- 使用折叠表达式打印每个元素之间的空格
- 如何计算大小为 1000 x 1000 的 2D 数组中 2 个元素之间的步幅?C++
- OpenCV 文件存储 - 错误:元素之间的解析错误 (icvYMLParseValue) 缺失
- 在查找子集中元素和元素数量之间的二进制比较背后的逻辑是什么?
- 使用动态创建的选项卡元素在C 和QML之间绑定
- C++11 在列表到映射(或其他容器)之间移动元素
- 从 1 中创建新的字符 * 作为参数,元素位于 2 个索引之间
- 如何在对一组中的一对之间找到一个元素
- C++ - 前两个元素之间的差异
- 字符串和向量<string>元素之间的区别
- 在两个std::向量之间匹配元素
- 如何删除给定索引之间的所有元素
- 当我删除数组时,指针在哪里?指向数组的指针与数组中的元素之间的区别
- 为什么指针减法会导致介于两者之间的元素数量
- 在给定某些约束的情况下,求出元素之间的最大距离