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()需要返回一个引用(即某个常量,@PhoenixX_2)。为什么它需要返回一个引用(以及为什么 仅仅一个简单的副本是不够的)的解释是因为

问题是对 getSigma 的两次调用,产生了两个不同的向量。传递给 sort 的一对迭代器不是有效范围 - 这两个迭代器指向不同的容器。

解释由@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 回答