C++ 为什么我从这个合并排序中得到堆栈溢出错误?(C+;+;)

C++ 为什么我从这个合并排序中得到堆栈溢出错误?(C+;+;),c++,sorting,merge,stack-overflow,C++,Sorting,Merge,Stack Overflow,我正在尝试使用合并排序对已转换为无符号long的IP地址列表进行排序。向量包含18647个数字,如果这有区别的话。我曾经使用C语言做过一个合并排序,但是这是我第一次尝试C++,所以我不知道是否有一些简单的东西我丢失了。以下是我目前掌握的代码: vector<unsigned long> Sorter::mergeSort( vector<unsigned long> v){ if( v.size() <= 1 ){ return v;

我正在尝试使用合并排序对已转换为无符号long的IP地址列表进行排序。向量包含18647个数字,如果这有区别的话。我曾经使用C语言做过一个合并排序,但是这是我第一次尝试C++,所以我不知道是否有一些简单的东西我丢失了。以下是我目前掌握的代码:

vector<unsigned long> Sorter::mergeSort( vector<unsigned long> v){
    if( v.size() <= 1 ){
        return v;
    }
    vector<unsigned long> left, right;
    int mid = v.size() / 2;
    for( int i = 0; i < mid; i++ ){
        left.push_back( v[i] );
    }
    for( unsigned int j = mid; j <= v.size(); j++ ){
        right.push_back( v[j] );
    }
    left = Sorter::mergeSort( left );
    right = Sorter::mergeSort( right );
    return Sorter::merge( left, right );
}

vector<unsigned long> Sorter::merge( vector<unsigned long> left, vector<unsigned long> right){
    vector<unsigned long> result;
    while( left.size() > 0 || right.size() > 0 ){
        if( left.size() > 0 && right.size() > 0 ){
            if( left[0] <= right[0] ){
                result.push_back( left[0] );
                left.erase( left.begin() );
            }else{
                result.push_back( right[0] );
                right.erase( right.begin() );
            }
        }else if( left.size() > 0 ){
            result.push_back( left[0] );
            left.erase( left.begin() );
        }else if( right.size() > 0 ){
            result.push_back( right[0] );
            right.erase( right.begin() );
        }
    }
    return result;
}
向量排序器::合并排序(向量v){
如果(v.size()0){
if(left.size()>0&&right.size()>0){
if(左[0]0){
结果。向后推_(左[0]);
left.erase(left.begin());
}else if(right.size()>0){
结果。推回(右[0]);
right.erase(right.begin());
}
}
返回结果;
}
用于(无符号整数j=mid;j
for( unsigned int j = mid; j <= v.size(); j++ )
                             ^^