c++ - 如何创建一个既接受数组又接受 vector 引用的函数模板?

标签 c++ arrays templates vector

如何创建一个既接受数组又接受 vector 引用的函数模板?

目前我有一个需要接受数组或 vector 的函数模板,它会对条目进行排序。截至目前,它只接受数组。

代码:

template <class T, class B>
class SelectionSort
{
    public:
        void IterativeSort(T &data, B size)
        {

            for (unsigned int index = 0; index < size; index++)
            {
                int smallestNum = index;

                for (unsigned int inner = index; inner < size; inner++)
                {
                    if (data[smallestNum]>data[inner])
                    {
                        smallestNum = inner;
                    }
                }


                int temp = data[smallestNum];
                data[smallestNum] = data[index];
                data[index] = temp;
            }


        }
}

数组调用:

//  sort copy of small array with iteration
SelectionSort<int, int> smallArrayIterativeSort;
smallArrayIterativeSort.IterativeSort(copySmallArray, smallSize);

vector 调用:

//  sort small vector with iteration
SelectionSort<vector <int>, int> smallVectorIterativeSort;
smallVectorIterativeSort.IterativeSort(smallVector, smallSize);

最佳答案

我很想创建一个采用迭代器而不是对象本身的模板函数。

有点像这样:

template<typename Iterator>
void IterativeSort(Iterator begin, Iterator end)
{
    for(Iterator index = begin; index != end; ++index)
    {
        Iterator smallestNum = index; 

        for(Iterator inner = index; inner != end; ++inner)
        {
            if(*smallestNum > *inner)
                smalestNum = inner;
        }

        // etc....

    }
}

int main()
{
    int array[1024];
    std::vector<int> vec(1024);

    IterativeSort(array, array + sizeof(array)/sizeof(int));
    IterativeSort(vec.begin(), vec.end());
}

关于c++ - 如何创建一个既接受数组又接受 vector 引用的函数模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441989/

相关文章:

C++ if 语句

c函数: re-initialize a static array or declare new every call?

c++ - 即使存在带有结束条件的重载,带有模板参数包的递归函数也会不断调用自身

c++ - 泛型函数中类的泛化为基类创建目标代码?

java - DB2 事务日志

C++多维数组初始化

c++ - 如何读取二进制文件的 block (未知大小)?

javascript - 合并两个具有相同键的对象数组,某些对象不会具有相同的值?

c - 数组的行为

c++ - 为什么 unique_ptr<Derived> 隐式转换为 unique_ptr<Base> ?