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

代码如下,我用了快速排序法的模板,

#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;
}
关键是如何修改……谢谢~~

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++标准的态度也是人们诟病他的地方之一.
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-20
这很正常,不同编译器对c++的标准支持的不一样.
按照错误提示修改就行了.
第2个回答  2011-05-20
VC6不支持标准C++,学习的话还是用devC++比较好
VC6太误导人啦
想用VS的话用vs2010比较好,支持全新的C++09标准追问

不知道这个应该怎么修改,谢谢高手哈~~

为什么我在DEvc跟在原版VC++运行结果不一样
在VC6和DevC++里则先计算#1(也就是a[i]此时i值未改变)得到也是0在计算#2(也就是a[++i])得到2,所以结果是f[0][2],同理第二轮循环则得到f[2][1],所以打印3和8。

我的VS C++6.0为什么编译总是出现一个错误?
因此问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—>“Option(选择)” —>“Directories(目录)”重新设置“Excutable Fils、Include Files、 Library Files、Source Files”的路径。很多情况可能就一个盘符的不同 (例如你的VC装在C,但是这些路径全部在D),改过来就OK了。如果你是...

vc++编译为什么会出现error spawning c1.exe的错误?
VC++编译出现error spawning c1.exe的错误是因为编译环境设置出问题导致的。细节如下:出现这种问题的VC6一般是绿色版和精简版的VC;出现编译不通过的原因主要是VC6的配置文件没有设置好打开vc界面 点击VC“TOOLS(工具)”—>“Option(选项)” —>“Directories(目录)”重新设置“Excutable Fils(可...

为什么我的C++代码在VC6.0中通不过编译
楼上的说得不对。名空间是C++的标准特性,VC6作为标准ANSI C\\C++编译器当然支持,问题在于,C++的头文件包含时,应省略".h",凡是在包含是写成“<XXX.h>”的文件,是为了与C语言兼容而引入的“C++向下兼容头文件”,也就是符合C标准的头文件,这类头文件不含标准名空间std。将你的 include <...

devc++上编写的程序能在vc6.0上运行吗?
差不多就是上面说的,不过可能有一些代码的用法不同,修改一下就行了。早期的mingw也不是那么遵循C++规范,和VC6的半斤八两吧。

为什么同样的程序vc ++和tc++运行的结果不一样
结果不一样很正常 C语言某些问题在ANSI C中并没有明确规定 因此各个编译器都有不同的编译方法 课本上一般都以TC的结果为正确答案

dev c++与 vc6的区别
Dev-C++ 是一个 C++ 开发工具。它包括多页面窗口、工程编辑器,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序。它也提供高亮度语法显示的,以减少编辑错误。一个windows下非常不错的IDE。它使用了GCC3.2.3做为它的编译器,当也支持更高版本的Mingw(Windows版的GCC) 。跟VC和BCB相比,...

我装了c++程序本身没有错误,可是运行后总是提示有一个错误,求教!!!
代码没什么错误,你的编译环境有错吧?从图片上看不到你的错误提示,不过看你用的好象是VC6,而写的是C代码,不知道你是如何创建工程的,如果创建的是控制台应用程序,那你的程序是不是Cl编译错误?你试试打开工程菜单,选择Settings,看C\/C++面版中选择Precompiled Headers里面是不是选择的Use ...

...C-Free 5, Dev C++, Microsoft Visual C++ 6.0,哪个比较好_百度知 ...
感觉codeblocks比较好。。因为VC虽然比较便捷,但是版本旧,在xp用比较好,而对win7的兼容性差,易出问题。而codeblocks对windows支持足够,运行稳定,编辑程序时对文字的搜索比较方便。。其他的编译器不清楚具体情况。。

vc6写书上的程序,编译不报错,无法执行。错误为执行Link.exe出错_百度...
编译错误: 存在语法错误,缺少某个头文件等很明显的错误,如果编译错误都不能解决,就说明写代码那个人水平极低。编译主要是针对某个具体模块的。链接错误:链接是主要针对多个模块而言的。这个理论太多。我就举个例子来说明:地图上的长城与实际的长城,我们平时说去长城玩儿,这个长城指的是“虚”的,...

相似回答