为什么我的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;
}
关键是如何修改……谢谢~~ 展开
#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;
}
关键是如何修改……谢谢~~ 展开
3个回答
展开全部
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++标准的态度也是人们诟病他的地方之一.
具体到你这个例子上,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++标准的态度也是人们诟病他的地方之一.
展开全部
这很正常,不同编译器对c++的标准支持的不一样.
按照错误提示修改就行了.
按照错误提示修改就行了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
VC6不支持标准C++,学习的话还是用devC++比较好
VC6太误导人啦
想用VS的话用vs2010比较好,支持全新的C++09标准
VC6太误导人啦
想用VS的话用vs2010比较好,支持全新的C++09标准
追问
不知道这个应该怎么修改,谢谢高手哈~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询