在堆栈<int>上使用 std::max_element
Using std::max_element on a stack<int>
如何准确地获得堆栈的max_element?STL堆栈没有任何begin()
或end()
方法,我可以通过以下方式获得最大值:
auto max = max_element(c.begin(), c.end());
std::stack
有一个受限的接口,这就是抽象的全部意义。如果没有,那么您可以使用例如std::deque
。但你有很多选择:
-
您可以弹出所有项目。如果你想在最后把原来的叠放回去,那么你可以把它们推回去。
-
您可以访问基础容器(不使用派生类)。它是受保护的成员。如果您害怕强制转换和形式上未定义的行为,那么针对成员指针的臭名昭著的C++类型系统漏洞是有用的。
-
您可以直接使用自定义派生类而不是
std::stack
。
这份清单并不详尽,但它们是更自然的选择。
也就是说,其他方法是相当不自然的&解释。
相关文章:
- 关于 std::min, std::max 中的比较运算符的混淆
- std::max() 函数与定点实现的比较中的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 在枚举类型上使用std::max是不是一种糟糕的做法
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- C++是否在 std::min 和 std::max 下标准化 std::optional 的行为?
- 编译器无法推断 std::max 的重载
- 为什么 c++ 编译器在对两种不同类型的数值变量使用"std::max()"函数时会出现错误
- 执行 std::min(0.0, 1.0) 和 std::max(0.0, 1.0) 会产生未定义的行为
- 自动变量可存储函数指针到std :: max
- std :: max带有动态数组
- std :: max,但用于模板参数
- 如果std::max()通过引用返回(这是必须的),这是否会导致悬空引用
- std::max with lambda and auto
- 在c++11中,如何在向量上调用std::max
- 有没有办法防止开发人员使用std::min, std::max
- 关于std::min()和std::max()的c++可变模板版本的思考
- std::max-需要一个标识符
- 将std::max转换为Java
- 如何在不重载比较操作符的情况下为std::max专门化自定义类型