C++ 在数组中循环并查找最靠近键的数组元素的最佳方法是什么?

C++ 在数组中循环并查找最靠近键的数组元素的最佳方法是什么?,c++,visual-c++,C++,Visual C++,这是我到目前为止的代码,我被卡住了。就绝对值而言,最接近7的值为5。如何检查数组的每个元素以查看它是否是最近的元素,然后返回该值。我知道这可能比我想象的要容易,但我是编程的初学者 #include <iostream> #include <cmath> using namespace std; const int MAX = 25; int searchArray(int [], int); \\prototype int main(){ int numA

这是我到目前为止的代码,我被卡住了。就绝对值而言,最接近7的值为5。如何检查数组的每个元素以查看它是否是最近的元素,然后返回该值。我知道这可能比我想象的要容易,但我是编程的初学者

#include <iostream>
#include <cmath>
using namespace std;

const int MAX = 25;

int searchArray(int [], int); \\prototype

int main(){

    int numArray[MAX] ={1,4,5,10,11,12,13,14,15,16,17,18,19,20,35,26,43,15,48,69,32,45,57,98,100};

searchArray(numArray, 7);
system("pause");
return 0;
}


int searchArray(int a[], int b){

int distance = 0;

for(int i=0;i<MAX;i++){
    if(i==b)
        return i;
    else if(i<b || i > b)
        abs(distance) == i-b;
    return distance;


}

}
#包括
#包括
使用名称空间std;
常数int MAX=25;
int搜索数组(int[],int)\\原型
int main(){
int numArray[MAX]={1,4,5,10,11,12,13,14,15,16,17,18,19,20,35,26,43,15,48,69,32,45,57,98100};
searchArray(numArray,7);
系统(“暂停”);
返回0;
}
整数搜索数组(整数a[],整数b){
整数距离=0;
对于(int i=0;i您可以使用为:

您可以将其用作:


将搜索功能写入以下内容:

int searchArray(int a[], int b){

    int min_dist = 0; // keep track of mininum distance seen so far
    int min_index = 0; // keep track of the index of the element 
                       // that has the min index

    for( int i = 0; i < a.Length; i++ ){ // a.Length is the size of the array
        if( a[i] == b ) { // if we find the exact one, stop
            return i;
        } else { // otherwise, keep looking for the closest
            if ( abs(a[i] - b) < min_dist ) { // if this one is closer, update
                min_dist = abs(a[i] - b);
                min_index = i;
            }
        }
    }
    return min_index; // when we finish return the index of the closest
}
intsearcharray(inta[],intb){
int min_dist=0;//跟踪到目前为止看到的最小距离
int min_index=0;//跟踪元素的索引
//它有最小索引
对于(inti=0;i
将搜索功能写入以下内容:

int searchArray(int a[], int b){

    int min_dist = 0; // keep track of mininum distance seen so far
    int min_index = 0; // keep track of the index of the element 
                       // that has the min index

    for( int i = 0; i < a.Length; i++ ){ // a.Length is the size of the array
        if( a[i] == b ) { // if we find the exact one, stop
            return i;
        } else { // otherwise, keep looking for the closest
            if ( abs(a[i] - b) < min_dist ) { // if this one is closer, update
                min_dist = abs(a[i] - b);
                min_index = i;
            }
        }
    }
    return min_index; // when we finish return the index of the closest
}
intsearcharray(inta[],intb){
int min_dist=0;//跟踪到目前为止看到的最小距离
int min_index=0;//跟踪元素的索引
//它有最小索引
对于(inti=0;i
您可以使用标准算法来完成这项工作:

struct closer_to
{
    int target_;

    explicit closer_to( int target ) : target_( target ){}

    bool operator ()( int left, int right ) const
    {
        return std::abs( target_ - left ) < std::abs( target_ - right );
    }
};

int* iter =
    std::min_element(
        numArray + 0, numArray + MAX
      , closer_to( 7 )
    );

您可以使用标准算法来实现这一点:

struct closer_to
{
    int target_;

    explicit closer_to( int target ) : target_( target ){}

    bool operator ()( int left, int right ) const
    {
        return std::abs( target_ - left ) < std::abs( target_ - right );
    }
};

int* iter =
    std::min_element(
        numArray + 0, numArray + MAX
      , closer_to( 7 )
    );

您必须将您的数字与阵列上的每个数字进行比较,并跟踪到目前为止的最小距离

int searchArray(int a[], int b){
    int minDistance = -1;

    for(int i=0;i<MAX;i++){
        if(minDistance == -1 || abs(minDistance - b) > abs(a[i] - b))
            minDistance = a[i];
    }
    return minDistance;
}
intsearcharray(inta[],intb){
智力距离=-1;
对于(int i=0;i abs(a[i]-b))
心灵距离=a[i];
}
回心转意;
}

您必须将您的数字与阵列上的每个数字进行比较,并跟踪到目前为止的最小距离

int searchArray(int a[], int b){
    int minDistance = -1;

    for(int i=0;i<MAX;i++){
        if(minDistance == -1 || abs(minDistance - b) > abs(a[i] - b))
            minDistance = a[i];
    }
    return minDistance;
}
intsearcharray(inta[],intb){
智力距离=-1;
对于(int i=0;i abs(a[i]-b))
心灵距离=a[i];
}
回心转意;
}

嗯,abs(distance)==i-b应该做什么?你为什么要把i比作a[i]而不是a[i],看起来你需要仔细阅读你的作业。啊,你是对的,所有的都应该是a[i]。就像我说的,我是初学者。我用了abs(distance)==a[i]-b试着找出一个元素离键7有多远的绝对值。尼克,请不要发表“谢谢”的评论。这就是投票的目的。只有在你真的有建设性的话要说的时候才发表评论。嗯,那abs(distance)=i-b应该做什么?你为什么要把i比作be而不是a[i],看起来你需要仔细阅读你的家庭作业。啊,你是对的,所有的都应该是a[i]。就像我说的,我是初学者。我用abs(distance)==a[i]-b来尝试找出元素与键7之间的绝对距离。尼克,请不要说“谢谢”评论。这就是投票的目的。只有当你真的有建设性的话要说时才发表评论。@Nick-请看编辑版=)修正其他一些次要问题mistakes@Nick-请参阅编辑的版本=)修复其他一些小错误