Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二进制搜索问题的(“向量下标超出范围”) 我尝试在C++中实现二值搜索功能,在这个函数中,我已经对整数向量进行排序,然后输入整数向量来检查我搜索的值的索引,如果没有找到值,则应该返回1的_C++_Algorithm_Vector_Binary Search - Fatal编程技术网

二进制搜索问题的(“向量下标超出范围”) 我尝试在C++中实现二值搜索功能,在这个函数中,我已经对整数向量进行排序,然后输入整数向量来检查我搜索的值的索引,如果没有找到值,则应该返回1的

二进制搜索问题的(“向量下标超出范围”) 我尝试在C++中实现二值搜索功能,在这个函数中,我已经对整数向量进行排序,然后输入整数向量来检查我搜索的值的索引,如果没有找到值,则应该返回1的,c++,algorithm,vector,binary-search,C++,Algorithm,Vector,Binary Search,问题是我收到消息_DEBUG_ERRORvector下标超出范围;调试时 这是密码 #include <iostream> #include <cassert> #include <vector> using std::vector; int binary_search(const vector<int> &a, int x, int left, int right) { left = 0; right = (int)

问题是我收到消息_DEBUG_ERRORvector下标超出范围;调试时

这是密码

 #include <iostream>
#include <cassert>
#include <vector>

using std::vector;

int binary_search(const vector<int> &a, int x, int left, int right) {
    left = 0;
    right = (int)a.size();
    if (left > right) return -1;
    int mid = (left + ((left - right) / 2));
    if (a[mid] == x)
    {
        return mid;
    }
    else if (x > mid)
    {
        return binary_search(a, x, mid + 1, right);
    }
    else if (x < mid)
        return binary_search(a, x, left, mid - 1);
}

int linear_search(const vector<int> &a, int x) {
    for (size_t i = 0; i < a.size(); ++i) {
        if (a[i] == x) return i;
    }
    return -1;
}

int main() {
    int n;
    std::cin >> n;
    vector<int> a(n);
    for (size_t i = 0; i < a.size(); i++) {
        std::cin >> a[i];
    }
    int m;
    std::cin >> m;
    vector<int> b(m);
    int left =0;
    int right= (int)a.size() - 1 ;
    for (int i = 0; i < m; ++i) {
        std::cin >> b[i];
    }
    for (int i = 0; i < m-1; ++i) {

        std::cout << binary_search(a, b[i], left, right) << ' ';
    }
}

此代码有两个问题:

在二进制搜索函数中,首先为参数指定新值,这将导致无限递归。只需删除此任务

您的mid分配如下:int mid=左+左-右/2;但是应该是这样的:int mid=left+right-left/2;您当前的mid始终小于或等于left,您的错误出现在这里,因为您尝试使用负索引

right应该初始化为inta.size-1。不,等等。由于这是二进制搜索的递归实现,因此不必在函数内部对左、右进行初始化。它们的值来自上一次调用。