我正在制作一个 C++ 代码并且发生错误我不知道为什么

I am making a c++ code and error occurs I don't know why

不知道我的问题出在哪里。我试着编译一次代码,它成功了。但是,我将它复制到一个新项目中以修改它,只是颜色或等待时间,它只适用于第一个程序。怎么了?我真的很沮丧。使用此代码,我想绘制正弦函数的图形。这是我的代码:

#include <bits/stdc++.h>

using namespace std;
int main()
{
    int t,n1,n2,res=0;
    cin>>t;
    vector<int> v1;
    vector<int> v2;
    while (t--) {
        cin>>n1>>n2;
        v1.push_back(n1);
        v2.push_back(n2);
    }
    for (int i=v1.size();i>0;i++) {
        bool state=binary_search(v2.begin(),v2.end(),v1[i-1]);
        if (state){
            v1.pop_back();
            res++;
        }
    }
    cout<<res<<endl;
    return 0;
}

error of the console

改变

for (int i=v1.size();i>0;i++)

for (int i=v1.size();i>0;i--)

否则你会越界访问 -> UB.

甚至到内存中的另一个段 -> SIGSEGV.


还有 std::binary_search 说:

"... A fully-sorted range meets these criteria."

所以在调用 binary-search 之前你必须做

std::sort (v2.begin(), v2.end());

for 语句中有错字

for (int i=v1.size();i>0;i++) {
                         ^^^

很明显你的意思是相反

for (int i=v1.size();i>0;i--) {
                         ^^^

for语句最好写成

for ( auto i = v1.size(); i != 0; i-- ) {
      ^^^^

但是无论如何程序都是错误的。

首先,在使用方法 std::binary_search 之前,您必须对向量 v2.

进行排序

第二个问题是这个调用

v1.pop_back();

不必删除在向量 v2 中找到的向量 v1 的元素。它可以只删除向量 v1 中甚至不存在于向量 v2.

中的最后一个元素