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