C++中结构向量的排序问题

C++中结构向量的排序问题,c++,sorting,vector,struct,C++,Sorting,Vector,Struct,因此,我基本上是在尝试创建一个函数,它根据任务的优先级对一个名为tasks的结构向量进行排序。每当给定向量有两个或更多项时,我的程序就会崩溃。不知道我的代码帮助有什么问题!n谢谢 void sort_tasks(std::vector<tasks> &tasks_list) { if(!tasks_list.empty()){ bool result = false; do { int count

因此,我基本上是在尝试创建一个函数,它根据任务的优先级对一个名为tasks的结构向量进行排序。每当给定向量有两个或更多项时,我的程序就会崩溃。不知道我的代码帮助有什么问题!n谢谢

void sort_tasks(std::vector<tasks> &tasks_list)
{
    if(!tasks_list.empty()){
        bool result = false;
        do
        {
            int counter = 0;
            for(std::vector<tasks>::iterator i = tasks_list.begin(); i != tasks_list.end(); i++)
            {
                if(counter < tasks_list.size())
                {
                    auto j = i++;
                    if(i->task_priority < j->task_priority) {
                        auto temp = *j;
                        *j = *i;
                        *i = temp;

                        if(!result) {
                            result = true;
                        }
                    }
                }
                counter++;
            }
        } while(result);

    }
}
这里auto j=i++;在增量之后,不检查i是否为tasks\u list.end


您可以在for中很好地检查它,但是您也必须在这里检查它,因为您增加了迭代器。

您可以使用std::sort吗?它将比冒泡排序更简单、更高效。当您使用调试器运行程序时,您看到了什么?这正是调试器的用途。如果您不知道如何使用调试器,这是一个很好的机会,可以学习如何使用调试器一次运行一行程序,监视所有变量及其值的变化,并分析程序的逻辑执行流。了解如何使用调试器是每个C++开发人员所需的技能,没有例外。在调试器的帮助下,您应该能够快速找到您编写的此程序和所有未来程序中的所有错误,而无需向任何人寻求帮助。了解如何调试程序是了解程序运行过程中发生了什么的关键技能。请思考我何时指向向量中的最后一个元素。当你做i++的时候,它会指向哪里?这部分代码应该只在“i”小于向量的大小时执行,但由于索引从0开始,所以它必须是i