ページ 11

visual studioでは通るがAOJでは通らないコード(C++)

Posted: 2015年4月12日(日) 02:42
by akil
visual stdio 2013 expressでは動くものの、Aizu Online Judgeではコンパイルエラーとなるプログラムについてお聞きしたいです。
以下がそのコードです。(AOJでのユーザー名バレを避けるため関係あると思われる部分のみ抜粋しております。)

コード:

 
#include <iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
//
//
	reverse(hairetuA.begin() + hairetuB.back(), hairetuA.end()); 	
//
//	
}
 
AOJでのエラーコードは、
code.cpp: In function ‘int main()’:
code.cpp:24:5: error: ‘reverse’ is not a member of ‘std’
です。


なお、以下のようにしたらAOJでも通りました。

コード:

 
#include <iostream>
#include<vector>
#include<algorithm>/////////////////////////////////ここ追加
#include<string>
using namespace std;
int main(){
//
//
	reverse(hairetuA.begin() + hairetuB.back(), hairetuA.end()); 	
//
//	
}
 
お聞きしたいのは、
1、なぜvisual studio では通って AOJでは通らなかったのか?
2、ほかにもvisual studioのコンパイル とオンラインジャッジのそれで違う結果が帰ることはあるのか?
の2点です。
よろしくお願いします。

Re: visual studioでは通るがAOJでは通らないコード(C++)

Posted: 2015年4月13日(月) 11:53
by YuO
akil さんが書きました:1、なぜvisual studio では通って AOJでは通らなかったのか?
  • VSの<iostream>か<vector>か<string>が,<algorithm>またはstd::reverseの定義された実装ファイルをインクルードしていた
  • AOJで使われている処理系ではそれがなされていなかった
というだけかと。利用するにあたりstd::reverseは<algorithm>をインクルードしなければいけないため,VSで通ったのはたまたまだと思います。
必要なヘッダーは明示的にインクルードすべきかと。