繁体   English   中英

找到两个向量之间的最大元素

[英]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

int m = std::accumulate(begin(b), end(b),
             std::accumulate(begin(a), end(a), INT_MIN, std::max<int>),
             std::max<int>);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM