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