質問: ### 配列の宣言の仕方とsortとの表記の仕方によってエラーが起きます。以下にいくつかの例を挙げます。なぜうまくいいったり、いかなったりするのか分かる方がいたら教えていただきたいです。 ``` #include using namespace std; int main() { int n; cin >> n; int a[n]; for(int i=0;i> a[i]; } sort(a.begin(),a.end()); ........ } ``` この場合だと以下のエラーが出る。 ``` ./Main.cpp: In function ‘int main()’: ./Main.cpp:11:10: error: request for member ‘begin’ in ‘a’, which is of non-class type ‘int [n]’ 11 | sort(a.begin(),a.end()); | ^~~~~ ./Main.cpp:11:20: error: request for member ‘end’ in ‘a’, which is of non-class type ‘int [n]’ 11 | sort(a.begin(),a.end()); | ^~~ ``` この場合、配列の宣言を `vector a;` とすると、コンパイルに問題はないが実行時エラーが出る。 また、配列の宣言を `vector a(n);` とするとうまくいく。 また、配列の宣言は最初のままで、sortを `sort(a,a+n);` とするとうまくいく。このsortの使い方も調べてもなかなか出てこなかったので、何を意味しているのか教えていただけたら幸いです。
回答: 普通の配列(C形式の配列)にはメンバ関数`begin`がないからです。 ``` sort(std::begin(a), std::end(a)); ``` を使うとよいです。