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

时间:2017-08-18 12:17:52

标签: c++ vector console codeblocks

不知道我的问题在哪里。我尝试编译一次代码并且它有效。但是,我将它复制到一个新项目中以便修改它,只是颜色或等待的时间,它只适用于第一个程序。怎么了?我感到非常沮丧。使用此代码,我想绘制正弦函数。这是我的代码:

#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

2 个答案:

答案 0 :(得分:5)

更改

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

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

否则你会在界限后面访问 - &gt; UB

甚至是内存中的另一个细分 - &gt; SIGSEGV

同样std::binary_search说:

  

“...... 完全排序范围符合这些条件。”

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

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

答案 1 :(得分:1)

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();

不必删除向量v1中找到的向量v2的元素。它可以删除向量v1中的最后一个元素,它甚至不存在于向量v2中。