为什么我的C++代码在VC6上可以编译运行,但在dev C++编译错误和OJ上吃CE,代码如下,谢了~~

代码如下,我用了快速排序法的模板,#include<iostream>#include<vector>#include<algorithm>usingnamespaces... 代码如下,我用了快速排序法的模板,

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T> void Swap(T& a, T& b)
{
T c(a);
a = b;
b = c;
}

//排序
template<typename T> void QuickSort(T* arr, int left, int right)
{
int l, r;
T v;

l = left;
r = right;
v = arr[(left + right) / 2];

while (l <= r)
{
while (arr[l] < v)
++l;

while (arr[r] > v)
--r;

if (l <= r)
{
Swap<T>(arr[l], arr[r]);
++l;
--r;
}
}
if (l == r)
l++;

if (left < r)
QuickSort<T>(arr, left, r);

if (l < right)
QuickSort<T>(arr, l, right);
}

int main()
{
vector<int > v;
int n;
while (cin>>n)
{
int sum = 0;
int i;
for (i = 1; i<= n ;i++)
{
int j;
cin>>j;
v.push_back(j);
}
int m;
for (m = 1; m < n; m++)
{
QuickSort<int>(v.begin() , 0 , n - m); //////这行在dev c++上出错
v[0] = v[0] + v[1];
v.erase(v.begin() +1);
sum = sum +v[0];
}
cout<<sum<<endl;
}
system ("pause");
return 0;
}
关键是如何修改……谢谢~~
展开
 我来答
zadecn
2011-05-20 · 超过20用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:0
展开全部
VC对C++标准的态度向来是支持+扩展的方式,其他的例如g++ ,DevC++等基本都是严格执行C++标准,所以在某些地方会出现不一致的情况.

具体到你这个例子上,v.begin() 返回是是iterator类型,并不是指针类型.按照我的理解,VC的iterator提供了到指针类型的默认转换函数(这应该是对C++标准的扩展),但是Dev C++没有提供这样的支持,所以出现了这个问题.我的建议是修改如下:
QuickSort<int>(v.begin() , 0 , n - m); ===> QuickSort<int>(&v[0] , 0 , n - m);
应该就没有问题了

一般情况下,一旦出现编译器之间不兼容的问题,应该以标准为主.所以Dev C++的做法更可取一些;VC对C++标准的态度也是人们诟病他的地方之一.
777999666qhw
2011-05-20 · TA获得超过4871个赞
知道大有可为答主
回答量:5615
采纳率:25%
帮助的人:4616万
展开全部
这很正常,不同编译器对c++的标准支持的不一样.
按照错误提示修改就行了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5803c9a
2011-05-20 · TA获得超过2162个赞
知道小有建树答主
回答量:891
采纳率:0%
帮助的人:1223万
展开全部
VC6不支持标准C++,学习的话还是用devC++比较好
VC6太误导人啦
想用VS的话用vs2010比较好,支持全新的C++09标准
追问
不知道这个应该怎么修改,谢谢高手哈~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式