不知道我的问题在哪里。我尝试编译一次代码并且它有效。但是,我将它复制到一个新项目中以便修改它,只是颜色或等待的时间,它只适用于第一个程序。怎么了?我感到非常沮丧。使用此代码,我想绘制正弦函数。这是我的代码:
#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;
}
答案 0 :(得分:5)
更改
for (int i=v1.size();i>0;i++)
要
for (int i=v1.size();i>0;i--)
否则你会在界限后面访问 - &gt; UB
甚至是内存中的另一个细分 - &gt; SIGSEGV
“...... 完全排序范围符合这些条件。”
所以在调用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
中。