Man*_*ese 0 c++ arrays stl g++ windows-subsystem-for-linux
我试图解决一个codeforces 问题,这要求我使用以下公式找到多边形的内角:
((n-2)*180)/n
; 其中“n”是多边形边数。我取了一个大小为 5 的数组来存储三角形(n=3)和正方形(n=4)的角度。编写以下代码以在数组上搜索角度(60 度):
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int arr [5];
for(int n=3; n<5; n++){
arr[n] = ((n-2)*180)/n;
cout << "arr["<<n<<"] = "<< arr[n];
cout<<endl;
}
if(binary_search(arr, arr+5,60)){
cout << "YES"<<"\n";
}
else{
cout<< "NO"<<"\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在命令提示符(cmd)上编译并运行它后,我得到了以下意想不到的结果:
Run Code Online (Sandbox Code Playgroud)arr[3] = 60 arr[4] = 90 NO
后来我在 Windows Subsystem for Linux 上尝试了相同的代码,并得到了以下正确的输出:
Run Code Online (Sandbox Code Playgroud)arr[3] = 60 arr[4] = 90 YES
为什么数组中 60 的 std::binary_search() 函数在 cmd 上返回 false?即使它存储在索引 3。为什么它在 linux 终端上工作?
系统 | g++ --version | C++标准 |
---|---|---|
cmd (Windows) | g++ (MinGW.org GCC-8.2.0-5) 8.2.0 | C++14 |
linux终端(wsl) | g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 | C++14 |
您不会初始化所有数组,这意味着某些元素将具有不确定的值。以任何方式使用这种不确定的值都会导致未定义的行为。
如果不应该使用某些元素,则需要将它们初始化为满足二分查找要求(排序的数组)的某个值,例如零:
int arr[5] = { 0 }; // Initialize all elements to zero
Run Code Online (Sandbox Code Playgroud)
另一种选择是在搜索时只使用数组的初始化部分:
binary_search(arr + 3, arr + 5, 60)
Run Code Online (Sandbox Code Playgroud)