我对C++还很生疏,所以想知道是否有更简洁的方法来求向量的向量的最大值。下面是我的想法:
std::vector<std::vector<int>> score;
这个score
变量由其他一些代码填充。我希望存储最大值:
int max_value()
{
std::vector<int> row_maximums;
for (auto row = score.begin(); row != score.end(); ++row)
{
row_maximums.push_back(*std::max_element(row->begin(), row->end()));
}
return *std::max_element(row_maximums.begin(), row_maximums.end());
}
我主要是一个C#开发人员,所以通常习惯于在一行中使用LINQ:
List<List<int>> score;
public int max_value => score.Aggregate(0, (current, row) => row.Prepend(current).Max());
谢谢你的建议!
3条答案
按热度按时间nnvyjq4y1#
假设你能使用C++20,我会简单地写:
join
将矢量从2d展平为1d,max
将提供范围的最大值工作示例:godbolt.org
xdyibdwo2#
只是想表明事情可能比你想象的要简单得多:D
for (auto& row : score) {...}
等效于for (auto it = score.begin(); it != score.end(); ++it) { auto& row = *it; ... }
,但在本场景中更短。(当然,仅从C++11开始可用)eoxn13cs3#