[英]How to sort second array and arrange first array with respect to sorted second array in less than O(n^2) time?
[英]Why declaring the size of an array as n, before inputting n, works for the first time but not the second time?
我正在解決一個問題,在輸入 n 的值之前,我將數組的大小聲明為 n,它適用於第一個測試用例,但不適用於第二個測試用例。 為什么?
PS:我在網上找不到任何相關信息。
這是代碼片段
int n,arr[n];
cin>>n;
int n,arr[n];
cin>>n;
這試圖定義一個 VLA(可變長度數組)。 但是,VLA 不是 C++ 的一部分。
這可能支持作為編譯器的擴展(例如g++
支持作為擴展)。 在這種情況下,你仍然有問題。 定義數組時, n
未初始化。 所以它會觸發未定義的行為。
在定義 VLA之前,您需要閱讀n
:
int n;
std::cin >> n;
int arr[n];
請注意 VLA 是在stack上分配的。 因此,如果n
值足夠大,由於溢出(= 未定義的行為),您將有未定義的行為。 因此,最好避免使用 VLA。 您可以改用std::vector<int>
。
在您的示例中,您在初始化之前使用了n
的值。 這是UB。
此外,c++ 中不允許可變長度c++
。 例如
int n;
// compute n somehow
int arr[n];
也是不允許的。
如果您的程序不遵循語言規則,那么任何事情都可能發生,例如,有時工作,處理一些輸入,但不處理其他輸入,處理一些編譯器,但不處理其他,等等。基本上,你不能有任何對具有未定義行為的程序的期望。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.