最后一个元素不包含在binary_search中

时间:2017-05-10 13:34:05

标签: c++ vector

我必须找到数组列表中是否出现元素。 如果是,请计算不同数量的元素,并从n中减去它,这是数组的总大小。

我的问题。 经过几个案例后,我注意到,最后一个索引的值都没有被读取。 例如

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // your code goes here
    int test;
    cin>>test;
    for(int i=0;i<test;i++) {
        int n;
        cin>>n;
        vector<int> ar(n);
        for(int j=1;j<=n;j++) {
            cin>>ar[j];
        }
        int c=0;
        for(int j=1;j<=n;j++) {
            if(binary_search(ar.begin(),ar.end(),j)) {
                c++;
            }       
        }
        cout<<n-c<<endl;
    }
    return 0;
}

测试用例

1
3
0 1 2

答案应为1 我们发现1和2,c=0+2=2暗示cout<<n-c<<endl; = 3-2=1

根据此代码回答,结果为2

无法找到问题所在。

1 个答案:

答案 0 :(得分:0)

您的代码中似乎有一个错误:

在第15行

$sql = "
 SELECT *,(max_seats - taken_seats ) as free_seats
 FROM trips 
 WHERE departure = :departure 
 AND destination = :destination 
 AND taken_seats < max_seats
 ";

for(int j=1; j<=n; j++) 从0变为n-1,而不是1到n。因此,您编写的最后一个值将具有未定义的行为。

在你的情况下,你得到第一个元素的垃圾值,在我的情况下,它只是崩溃了。

解决问题,结果是预期的1。