使用for循环在memset()和initializinng数组元素之间的区别?

时间:2016-12-01 07:40:47

标签: c++

当我在memset函数中使用printNGE时,我在main()中将数组元素初始化为-1时得到了正确的结果,我得到了正确的结果。

但是当我使用for循环在printNGE函数中初始化相同时,我得到了错误的答案。由于某种原因,似乎数组元素的初始值在while循环的else部分内没有改变?请告诉我这种差异可能是什么原因。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stack>
using namespace std;

/* arr[] of size n */

void printNGE(int arr[], int n)
{
    int i = 0;
    stack <int> s;
    int ans[n];
    for(i=0;i<n;i++)//Set all the elements to -1
        ans[i] = -1;

    //memset(ans,-1,sizeof(ans));

    while (i<n)
    {
        if(s.empty() || arr[s.top()]>arr[i]) 
            s.push(i++);
        else
        {
            ans[s.top()]=arr[i];    
            s.pop(); //pop till incoming element is greater
        }
    }
    for(i=0;i<n;i++)
        printf("%d -> %d\n",arr[i],ans[i]);
}

int main()
{
    int arr[]= {11, 13, 21, 3};
    int i;
    int n = sizeof(arr)/sizeof(arr[0]);
    //int ans[n];
    //for(i=0;i<n;i++)//Set all the elements to -1
    // ans[i] = -1;
    printNGE(arr, n);
    getchar();
    return 0;
}

1 个答案:

答案 0 :(得分:5)

i循环的索引变量for未重置。因此,while循环不会被执行。