如何获取二维std::vector中内层vector的最大size()?
获取嵌套vector内层最大size的简洁方法
针对std::vector<std::vector<T>>这种嵌套结构,有几种简洁的方式可以获取内层vector的最大size():
方法一:使用std::max_element配合lambda(C++11+)
利用STL的max_element算法,结合lambda表达式直接比较内层vector的大小:
#include <vector> #include <algorithm> template <typename T> size_t get_max_inner_size(const std::vector<std::vector<T>>& nested_vec) { if (nested_vec.empty()) return 0; auto max_iter = std::max_element(nested_vec.begin(), nested_vec.end(), [](const auto& inner_a, const auto& inner_b) { return inner_a.size() < inner_b.size(); }); return max_iter->size(); }
max_element会遍历外层vector,找到size最大的内层vector,最后返回其size。外层为空时直接返回0,避免空迭代器访问错误。
方法二:范围for循环遍历更新(C++11+)
这种写法直观易懂,不需要额外引入算法头文件:
#include <vector> template <typename T> size_t get_max_inner_size(const std::vector<std::vector<T>>& nested_vec) { size_t max_size = 0; for (const auto& inner_vec : nested_vec) { if (inner_vec.size() > max_size) { max_size = inner_vec.size(); } } return max_size; }
初始化最大size为0,逐个遍历内层vector,实时更新最大值,逻辑清晰,适合大多数场景。
方法三:使用std::accumulate函数式写法(C++11+)
用accumulate实现函数式的最大值计算,核心逻辑一行搞定:
#include <vector> #include <numeric> template <typename T> size_t get_max_inner_size(const std::vector<std::vector<T>>& nested_vec) { return std::accumulate(nested_vec.begin(), nested_vec.end(), 0uz, [](size_t current_max, const auto& inner_vec) { return std::max(current_max, inner_vec.size()); }); }
accumulate从初始值0uz(size_t类型的0)开始,每次迭代用std::max比较当前最大值和内层vector的size,最终返回累计的最大值。外层为空时自然返回0。
内容的提问来源于stack exchange,提问作者jensph
相关产品推荐
相关产品推荐

