C ++中的这两个代码有什么区别?

时间:2018-10-27 15:22:19

标签: c++ c++11 data-structures stl

我正在尝试在Hackerrank上使用“哈希表:冰淇淋店”的问题。这是一个简单的问题,但这是我遇到的奇怪情况。数据结构的变化如何影响? 情况1:

void whatFlavors(vector<int> cost, int money) {
    int ans1,ans2;
    vector<int> arr(100,0);          //notice this
    for(int i=0;i<cost.size();i++){
        if(arr[money-cost[i]]!=0){
            ans1=i+1;ans2=arr[abs(money-cost[i])];
            if(ans1>ans2){
                cout<<ans2<<" "<<ans1<<endl;
            }else{
                cout<<ans2<<" "<<ans1<<endl;
            }
            break;
        }
        else{
            arr[cost[i]]=i+1;
        }
    }
}

输出为: enter image description here

情况2: 代码:

void whatFlavors(vector<int> cost, int money) {
    int arr[100]={0}; //notice this
    int ans1,ans2;
    for(int i=0;i<cost.size();i++){
        if(arr[money-cost[i]]!=0){
            ans1=i+1;ans2=arr[abs(money-cost[i])];
            if(ans1>ans2){
                cout<<ans2<<" "<<ans1<<endl;
            }else{
                cout<<ans2<<" "<<ans1<<endl;
            }
            break;
        }
        else{
            arr[cost[i]]=i+1;
        }
    }

}

输出: enter image description here

1 个答案:

答案 0 :(得分:3)

让我们注意到代码的这一部分:

if(arr[money-cost[i]]!=0){
    ans1=i+1;ans2=arr[abs(money-cost[i])];

这意味着您对money-cost[i]的某些值期望i为负。因此,您最终会读取数组(向量或数组)之外的位置,这将导致在两种情况下的不确定行为。