5

codechefでの提出が成功した中で、次のコードを見たところです。

http://www.codechef.com/viewplaintext/1595846

私はそれを考えていました

float max(int n,int arr[n][n])
{....}

C ++では許可されていません(「n」は変数であるため)。MinGW [gcc 4.4]を使用した(Windows上の)CodeBlocksで、コンパイル時エラーが発生します。その「エラー:配列のバインドは整数定数ではありません。

それでは、CodeChefの裁判官がそのような解決策をどのように受け入れることができるでしょうか。C ++でそれを可能にする特別なフラグはありますか?

編集:ステータスをACとして表示するリンク(承認済み): http: //www.codechef.com/viewsolution/1595846

4

2 に答える 2

5

可変長自動配列はISOC99で許可されており、拡張機能としてGCCはC90モードおよびC++でそれらを受け入れます。これらの配列は、他の自動配列と同じように宣言されますが、長さが定数式ではありません。

参照:http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

于 2012-12-11T11:12:29.270 に答える
4

私は正直に立っています:C99はCに対してこれを許可しますが、多くのコンパイラはまだそれを実装しておらず、おそらく決して実装しないものもあります(マイクロソフト)。

前の回答

arrをint**として渡すか、次のようなものを使用します

template< int N >
float max(const int (&arr)[N][N])
{ ... }

もちろん、Nはコンパイル時定数である必要があります。最も安全な解決策は、std::vectorまたはそのサイズに関する知識を持つ他のコンテナを使用することです。

全体的に、コードは私にはかなり壊れやすいようです。

于 2012-12-11T10:49:27.580 に答える