C++;将 std::array 随机访问迭代器作为函数参数传递

C++; Pass a std::array Random Access Iterator as a Function Parameter

所以我在这里看到了关于如何将 std::vector::iterator 作为参数传递给函数的问题,但是,这些解决方案在处理 std::array 时似乎并不适用秒。我想使用它的是一个接受 std::arrays 的快速排序功能。这是我到目前为止的代码:

#include <iostream>
#include <array>
#include <random>
#include <time.h>
using namespace std;


// Function declarations.
template<size_t SIZE>
void QuickSort(array<int, SIZE> arrayName, array<int, SIZE>::iterator low, \
    array<int, SIZE>::iterator high);

template<size_t SIZE>
auto Partition(array<int, SIZE> arrayName, array<int, SIZE>::iterator low, \
    array<int, SIZE>::iterator high);

// Main function.
int main()
{
    // Set rand() seed to current time (NULL).
    srand((unsigned)time(NULL));

    // Declare array "randomNumberArray" of size #.
    static array<int, 5> randomNumerArray = { 0 };

    // Initialize array with random numbers.
    for (auto it = randomNumerArray.begin(); it != randomNumerArray.end(); ++it)
        *it = rand() % 500 + 1;

    /*
    This is where I would want to use the Quick Sort function to sort the array and
    then print it out to the console.
    */

    cin.get();
    return 0;
}


// Function definitions. Standard Quick Sort syntax.
template<size_t SIZE>
void QuickSort(array<int, SIZE> arrayName, array<int, SIZE>::iterator low, \
    array<int, SIZE>::iterator high)
{
    if (low < high) {
        // Function definition to be finished.
    }

    return;
}

/* Partition() returns auto to easily return the variable type I need
which is a Random Access Iterator.*/
template<size_t SIZE>
auto Partition(array<int, SIZE> arrayName, array<int, SIZE>::iterator low, \
    array<int, SIZE>::iterator high)
{
    auto pivot = high;
    auto i = (low - 1);

    for (auto j = low; j < pivot; ++j) {
        if (*j < *pivot) {
            int tempNum = 0;
            tempNum = *(++i);
            *i = *j;
            *j = tempNum;
        }
    }

    int tempNum = 0;
    tempNum = *(++i);
    *i = *pivot;
    *pivot = tempNum;

    return i;
}

如您所见,我已经设法将大部分拼图拼成这个拼图,我只是不知道如何通过 lowhigh,这意味着是随机访问迭代器类型,作为函数的参数参数。使用 std::array<type, size>::iterator 不起作用,因为它不是一种类型。我也尝试添加 #include <iterator>,但无济于事。

编辑: 澄清一下,我试图传递的不是索引中包含的值,而是随每次递归而变化的索引本身。

您需要使用 typename 来提示编译器 iterator 是一个类型

template<size_t SIZE>
void QuickSort(typename array<int, SIZE>::iterator low,
               typename array<int, SIZE>::iterator high);

但这也行不通,因为 SIZE 处于非推导上下文中。最好只制作一个 iterator 作为模板

template<typename RandomIt>
void QuickSort(RandomIt low, RandomIt high);