0

これが私のコードです

bool cmp (const char &a, const char &b)
{   
    if ((int) a == (int) b)
    {
        return false;
    }

    if ((int) a > (int) b)
    {
        return false;
    }
    return true;
}   
std::sort(
        dfaVector.at(0).getSigma().begin(),
        dfaVector.at(0).getSigma().end(),
        cmp);

getSigma()を返しstd::vector<char>、それらは空ではありません-チェックしました。必要に応じて、gdb からスタック トレースを投稿できます。g++ 4.8、OS Mint 14 を使用しています

答え

@livingissuicide で示唆されているように、問題はgetSigma()参照を返す必要があることでした (つまり、sth 定数、@PhoenixX_2)。参照を返す必要がある理由 (および単純なコピーだけでは不十分な理由)の説明は、次のとおりです。

問題は、getSigma の呼び出しが 2 つあり、2 つの異なるベクトルが生成されることです。sort に渡された反復子のペアが有効な範囲ではありません - 2 つの反復子が異なるコンテナーを指しています。

@IgorTandetnik の厚意による説明。

4

2 に答える 2

5

getSigma() は std::vector< char > を返します

getSigma() 関数がコピーではなく参照 (std::vector< char >&) を返すことを確認してください!

于 2013-08-04T14:30:51.063 に答える
0

dfaVectorが空でないことを確認してください。また、getSigma()定数 (参照) を返すようにしてください。

于 2013-08-04T14:30:21.320 に答える