在这段代码中,对于向量大小,n> = 32767,它给出了分段错误,但是直到32766,它运行正常.什么可能是错误?这是完整的代码.
#include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<utility> #include<algorithm> #include<sys/time.h> using namespace std; #define MAX 100000 bool compare(pair<int,int> p1,pair<int,int> p2) { if(p1.second < p2.second) return 1; else if(p1.second > p2.second) return 0; if(p1.first <= p2.first) return 1; else return 0; } int main() { freopen("randomin.txt","r",stdin); int n; scanf("%d",&n); vector< pair<int,int> > p(n); for(int i=0;i<n;i++) scanf("%d%d",&p[i].first,&p[i].second); **printf("%d\n",(int)p.max_size()); // prints 536870911** sort(p.begin(),p.begin()+n,compare); //for(int i=0;i<n;i++) //printf("%d %d\n",p[i].first,p[i].second); printf("%.6f\n",(p[n-1].second+p[n-2].second)/(20.0+p[n-1].first+p[n-2].first)); return 0; }
解决方法
这可能与您的细分错误无关,但…
在C中,你的“比较”谓词必须是strict weak ordering.特别是“比较(X,X)”必须为任何X返回“false”.在比较函数中,如果两个对都相同,则打到测试(p1.first< = p2.first),并返回“true”.因此,这个“比较”谓词没有强制严格的弱排序,而将其传递给“排序”的结果是未定义的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。