Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用自定义比较器排序时出现运行时错误_C++_Sorting_Vector_Runtime Error_Stdstring - Fatal编程技术网

C++ 使用自定义比较器排序时出现运行时错误

C++ 使用自定义比较器排序时出现运行时错误,c++,sorting,vector,runtime-error,stdstring,C++,Sorting,Vector,Runtime Error,Stdstring,我正在尝试根据自定义比较器函数对字符串向量进行排序-: #include<bits/stdc++.h> using namespace std; template<typename T> std::string ToString( const T& obj ) { std::stringstream ss; ss << obj; return ss.str(); } bool comp( string num1, strin

我正在尝试根据自定义比较器函数对字符串向量进行排序-:

#include<bits/stdc++.h>
using namespace std;

template<typename T>
std::string ToString( const T& obj )
{
    std::stringstream ss;
    ss << obj;
    return ss.str();
}

bool comp( string num1, string num2 )
{
    bool swapped = false;

    if ( num2.size() > num1.size() )
    {
        swap( num1, num2 );
        swapped = true;
    }

    size_t i = 0;
    size_t j = 0;

    while ( i < num1.size() && j < num2.size() )
    {
        if ( num1[i] > num2[j] )
        {
            return !swapped;
        }
        else if ( num1[i] < num2[j] )
        {
            return swapped;
        }

        i++;
        j++;
    }

    j = 0;

    while ( i < num1.size() && j < num1.size() )
    {
        if ( num1[i] > num1[j] )
        {
            return !swapped;
        }
        else if ( num1[i] < num1[j] )
        {
            return swapped;
        }

        i++;
        j++;
    }

    return true;
}

string largestNumber( vector<int>& nums )
{
    vector<string> numsString( nums.size() );

    for ( size_t i = 0; i < numsString.size(); i++ )
    {
        numsString[i] = ToString( nums[i] );
    }

    string result;
    sort( numsString.begin(), numsString.end(), comp );

    for ( size_t i = 0; i < numsString.size(); i++ )
    {
        result += numsString[i];
    }

    return result;
}

int main()
{
    // Works okay if the size of vector is less than 17
    vector<int> nums( 17, 0 );
    largestNumber( nums );
}
#包括
使用名称空间std;
模板
标准::字符串到字符串(常量T&obj)
{
std::stringstream-ss;
ss num1.size())
{
互换(num1,num2);
交换=真;
}
尺寸i=0;
尺寸j=0;
而(inum2[j])
{
返回!交换;
}
否则如果(num1[i]num1[j])
{
返回!交换;
}
else if(num1[i]
我在Windows7 64位上使用TDM-GCC4.9.2,带有
-std=c++14
标志

每次输入向量的大小大于16时,我都会收到运行时错误。

我做错了什么?

向量numString
中的所有元素最终都具有相同的值
0
转换为字符串:

vector<int> nums( 17, 0 );
//                    ^

我不知道。每当我运行程序时,都会出现一个对话框,说明
已停止工作。一个问题导致程序停止正常工作。请关闭该程序。
否。我以前没有使用过任何程序,也不知道如何使用。ToString的定义可能很有用。您应该使用行为合理的自定义比较函数。最重要的是,在找到num1和num2之后等于较短的长度,您的代码似乎将num1的其余部分(如果有)与自身的早期部分(而不是num2的任何部分)进行比较。这真的是你的意图吗?在顶部检查字符串是否相等只会浪费时间并掩盖更基本问题的一部分。整体比较应避免出现以下情况:
if (num1 == num2) return false;