使用迭代器 c++ 进行排序

Sort using Iterators c++

本文关键字:排序 c++ 迭代器      更新时间:2023-10-16

我第一次开始使用迭代器,我有一个任务进行排序,它对任何 int 容器进行排序,后来对任何类型的容器进行排序。 所以,我很快就迷路了。这是我的代码:

#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
//*****************************************************
template <class Type, class Iterator>
void Sort (Type arr[], Iterator beginning, Iterator ending)
{
    int * intPointer;
    intPointer = arr;
    for(auto i=beginning; i<ending-1; i++)
    {
        for (auto j=i+1; j<ending; j++)
        {
            if (*intPointer>*intPointer++) // PROBLEM
            {
                swap(&intPointer, &intPointer); //AND HERE
            }
        }
    }
};
//----------------------------------------------------
template <class Type>
void swap(Type *value1, Type *value2)
{
   int temp = *value1;
   *value1 = *value2;
   *value2 = temp;
   return;
}
//----------------------------------------------------
template <class Type, class Iterator>
void display(Type arr[], Iterator beginning, Iterator ending)
{
    int * intPointer;
    intPointer = arr;
    for(auto i=beginning; i<ending; i++)
    {
        cout << *intPointer << " ";
        intPointer++;
    }
    cout << endl;
};
//*****************************************************
int main()
{
    int test[10] = {5,6,8,9,4,11,0,45,100,14};
    Sort(test, begin(test), end(test));
    display(test, begin(test), end(test));
}

它显示正确(如果有问题告诉我(,但在 Sort(( 上崩溃。很高兴得到一些建议,如何解决指针问题,并获得一些建议,当我将使用此代码进行任何类型的操作时,如何不迷路。在其他主题中找不到正确的信息。

if (*i > *j) // PROBLEM FIXED
{
    swap(*i, *j); //AND HERE FIXED
}

使用迭代器时,第一个参数中不需要数组。您可以将其删除:

void Sort(Iterator beginning, Iterator ending);
void display(Iterator beginning, Iterator ending);