C++ C++;?

C++ C++;?,c++,c++11,data-structures,stl,C++,C++11,Data Structures,Stl,我在尝试问题哈希表:Hackerrank上的冰淇淋店。这是一个简单的问题,但这是我遇到的奇怪情况。数据结构的变化有什么关系? 案例1: void whatFlavors(向量成本,整数货币){ int ans1、ans2; 向量arr(100,0);//注意这个 对于(int i=0;ians2){ cout让我们注意一下代码的这一部分: if(arr[money-cost[i]]!=0){ ans1=i+1;ans2=arr[abs(money-cost[i])]; 这意味着对于i的

我在尝试问题哈希表:Hackerrank上的冰淇淋店。这是一个简单的问题,但这是我遇到的奇怪情况。数据结构的变化有什么关系? 案例1:

void whatFlavors(向量成本,整数货币){
int ans1、ans2;
向量arr(100,0);//注意这个
对于(int i=0;ians2){

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

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

这意味着对于
i
的某些值,您的预期
金钱成本[i]
为负值。因此,您最终读取的位置位于数组(向量或数组)之外这将导致未定义的行为在这两种情况下

最可能的答案是由于缺少边界检查而导致数组溢出而导致的未定义的行为。由于此问题无法满足a的所有要求,如stackoverflow.com中所述,不太可能得到更完整的答案。如果您stion,删除所有令人讨厌的图像,并用a补充它,那么可能会有更好的答案。
int-arr[100]={0};
int-arr[100]={};
相同。您只为第一个元素指定了一个0,然后其他元素默认初始化,幸运的是也是0。@MatthieuBrucher
int-arr[100]={0}
int-arr[100]={}
都是用零初始化完整数组所必需的。请参阅,但方式不同:如果初始值设定项子句的数量小于成员的数量或初始值设定项列表完全为空,则其余成员为值初始化的。没有术语“值初始化”在C标准中。不清楚你的意思是什么。该标准说,其余元素的初始化方式与静态存储持续时间对象的初始化方式相同,也就是说,初始化为零。所有将某个对象初始化为零的方法都具有相同的效果,即将该对象初始化为零。
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;
        }
    }

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