C++ 函数返回向量中最小的正整数
c++ function return the smallest positive integer in a vector
我正在使用下面的代码,它返回向量中最小的正整数。我在这里得到了代码。我的问题是有理由将大小传递给函数,您不能在函数体中计算它吗?
另外,第二个if()
测试有什么用?我不明白这个 if 语句是如何工作的?
#include <vector>
using namespace std;
int rec_min_pos(const vector<int> & nums, int size) {
if (size < 1) {
return INT_MAX;
}
if(nums[size-1] > 0){
return min(nums[size-1], rec_min_pos(nums, size-1));
}
else{
return rec_min_pos(nums, size-1);
}
}
第二个if
语句检查元素的正性,因为函数应返回最小正整数。
你的函数是递归的,'size
'参数实际上是一加上最后一个要测试的元素的索引。这允许简单的递归函数设计,但需要额外的参数。在函数接口中明确这些要点可能更好
inline int recursive_min_positive(const int*arr, size_t i)
{
return
i==0? std::numeric_limits<int>::max() :
arr[i-1]<=0? recursive_min_positive(arr,i-1) :
std::min(arr[i-1],recursive_min_positive(arr,i-1) ;
}
int min_positive(std::vector<int> const&arr)
{
return recursive_min_positive(arr.data(), arr.size());
}
递归函数设计通常很优雅,但效率低下(尽管编译器倾向于展开递归(。在这里,非递归实现实际上更短、更清晰。
int min_positive(std::vector<int> const&arr)
{
int result = std::numeric_limits<int>::max();
for(auto val : arr)
if(0 < val && val < result) result = val;
return result;
}
除了所有注释: 您可以像这样重载函数:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Original function with size argument
int rec_min_pos(const vector<int> & nums, int size) {
if (size < 1) {
return INT_MAX;
}
if (nums[size - 1] > 0) {
return min(nums[size - 1], rec_min_pos(nums, size - 1));
}
else {
return rec_min_pos(nums, size - 1);
}
}
// Overloaded rec_min_pos function
int rec_min_pos(const vector<int> & nums) {
// here we just call the original rec_mon_pos function
return rec_min_pos(nums, nums.size());
}
int main()
{
vector<int> v{ 9,2,7,3,7,5,6 };
cout << rec_min_pos(v); // call the overloaded function
}
输出:
2
与递归函数无关,但扩展了我的评论:
int min_positive(std::vector<int> & nums)
{
auto elem = std::min_element(nums.begin(), nums.end(),
[](int lhs, int rhs){ return std::tie(std::signbit(lhs), lhs) < std::tie(std::signbit(rhs), rhs); }
);
if ((elem == nums.end()) || std::signbit(*elems)) { return MAX_INT; }
return *elem;
}
在这里,我们定义了一个比较函数,该函数先先为负,然后按值排序。我们使用三个参数std::min_element
,这将在 nums
中找到一个迭代器。
第一个检查处理一个空nums
,第二个检查每个值都是负数,这两个值都被原始忽略,返回MAX_INT
相关文章:
- 添加存储在向量中的大整数的函数出现问题
- C++模板函数,用于比较任何无符号整数和有符号整数
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 整数键映射到头文件中的成员函数指针
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 反转整数的一部分(一半)的函数
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 您将如何连接"on the fly"文本+整数并将其传递给函数?
- constexpr log10 整数函数
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 如何使用 binary_search STL 函数在嵌套类中搜索整数?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- C++:为什么我的掷骰子函数在掷骰子数量时只返回偶数整数?
- 从函数参数 [C++] 复制整数数组
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 模函数,避免C++整数溢出
- 通过规范化 // 函数来调整数组
- 我想使用 std::stoi 函数在 cpp 中将字符串转换为整数,因为我想在字符串中找到不同数字的总和(在下级酶中)
- 没有返回值的整数函数