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

罗德里戈·庞塞

因此,我在这里看到了有关如何将 astd::vector::iterator作为参数传递给函数的问题,但是,在处理std::arrays 时,这些解决方案似乎并不适用。我想用这个是一个快速排序函数,它接受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;
}

正如你所看到的,我已经设法将大部分部分融入这个难题,我只是不知道如何通过lowand high,它们是随机访问迭代器类型,作为函数的参数参数。usingstd::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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C++;将 std::array 作为函数参数传递

C ++“错误:将'const std :: map <int,std :: basic_string <char>>'作为...的'this'参数传递”

无法将 std::array 的一部分作为模板引用类型参数传递

创建一个C ++模板函数,该函数将返回特定大小的std :: array

将lambda函数作为参数C ++传递

将未知大小的std :: array传递给函数

C ++:如何将任何可迭代类型作为函数参数传递

将std :: array与传统数组进行比较C ++

将lambda作为std :: function的参数传递时,C ++候选模板被忽略的错误

C ++错误:将“ const std :: vector <Node>”作为“ this”参数传递会丢弃限定符[-fpermissive]

将-std = c ++ 11传递给CMakeLists?

将 std::left 作为参数传递

c ++ std::vector 作为类方法的参数传递的函数

无法将Callable作为参数启动C ++ std :: thread

将C数组分配给C ++的std :: array吗?(std :: array <T,U> = T [U])-从“ T [U]”到“ std :: array <T,U>”不存在合适的构造函数

将参数传递给std :: thread的区别,C ++

如何声明一个返回 std::list 或将 std::list 作为参数类型的 C++ 函数?

如何使用std :: array构造函数参数C ++列表初始化const std :: array成员

如何使用JNA将List <T>从Java传递到C ++ std :: vector函数参数

使用 std:array 作为函数的参数

将std :: array的double用作参数或将double分别用作参数来转换函数

将Java脚本函数作为参数传递给C ++函数

C ++ IDE将无法推断/自动完成模板类中std :: array下标表达式的成员访问

将向量迭代器传递给函数C ++

如果传递的函数也将函数作为参数,如何将函数作为参数传递给C中的函数?

将迭代器传递给函数的参数

C ++-将Rapidjson :: Document作为参数传递给函数

C将指针作为函数中的参数传递

将任何泛型函数作为C ++参数传递