Iterator变量在C ++中表现奇怪

时间:2017-12-13 06:09:49

标签: c++

所以我对C ++及其内存处理的复杂性有点新鲜。

我写了一段代码,其中main函数中的迭代器不像我期望的那样表现。它应该取n输入,而不是根据输入的值中途退出。 mergeSortmerge函数运行正常(至少对于具有预定义元素的小数组),因此无需检查。主要问题在于main功能。任何帮助将不胜感激。

#include<cstdio>
#include<iostream>
#include<sstream>
using namespace std;

 void merge(long int *a, long int start, long int mid, long int end)
 {
    long int *c=new long int[1000000];
    long int i,ptr1=0,ptr2=0,ptr=0;
    long int length1,length2;
    length1=mid-start+1;
    length2=end-mid;
    while(ptr1<length1 && ptr2<length2){
        if(a[start+ptr1]>a[mid+ptr2+1]){
            c[start+ptr]=a[mid+ptr2+1];
            ptr++;
            ptr2++;
         }
        else if(a[start+ptr1]<=a[mid+ptr2+1]){
            c[start+ptr]=a[start+ptr1];
            ptr++;
            ptr1++;
         }
     }

    while(ptr1<length1){
        c[start+ptr]=a[start+ptr1];
        ptr++;
        ptr1++;
    }
    while(ptr2<length2){
        c[start+ptr]=a[mid+ptr2+1];
        ptr++;
        ptr2++;
    }

    for(i=0;i<ptr; i++)
      a[start+i]=c[start+i];

 }


 void mergeSort(long int *a, long int start, long int end){

    if(start<end){
        long int mid;
        mid=(start+end)/2;
        mergeSort(a, start, mid);
        mergeSort(a,mid+1, end);
        merge(a, start, mid, end);
     }
 }

 /*Problem lies in Main*/

 int main()
 {
    string s;
    int n,i,j;
    long int *a=new long int[1000000]();
    cin >> n;
    for(i=0;i<n;i++){                             /************Loop exiting midway************/
        cin >> s;
        stringstream g(s);
        g >> n;
        a[i]=n;
     }
    mergeSort(a,0,n-1);
    for(j=0; j<5; j++){
        cout << a[j] << "\n";
     }
     return 0;
 }

原谅我代码格式不正确。

1 个答案:

答案 0 :(得分:2)

循环中的

g >> n;是原因。你覆盖n,因此它在中途失败了循环条件。

只需在循环中使用cin >> a[i];