gpt4 book ai didi

c++ - 模板类数组

转载 作者:行者123 更新时间:2023-11-28 02:18:51 26 4
gpt4 key购买 nike

我正在尝试为需要实现不同排序算法的算法类做一个项目。我正在尝试使用所示的模板类声明一个数组。我必须保持函数定义相同,因此不能更改任何参数。我的问题是关于我的数组声明,我收到错误“非类型模板参数是非常量表达式”。声明模板数组的正确方法是什么?任何帮助将不胜感激。

#ifndef __SORTING_HPP
#define __SORTING_HPP

#include "SortingHelper.h"
#include <iostream>
template <class T>
class Sorting
{
public:
T selectionsort(T* data, int size);
T insertionsort(T* data, int size);
T mergesort(T* data, int size, T* temp);
T quicksort(T* data, int size);
T data;
};
template <class T> void selectionsort(T* data, int size)
{
std::array<T*, size> myarray = data;
int min = 0;
int temp = 0;
if (isSorted(data, size))
{
return *data;
}
else
{
for (int i=0; i < size - 1; i++)
{
min = i;
for (int j=i+1; j < size; j++)
{
if (data[j] < data[min])
min= j;
}
if (min != i)
{
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
}
}
}
#endif

最佳答案

template <class T>  void selectionsort(T* data, int size)
{
std::array<T*, size> myarray = data;

size仅在运行时已知。 std::array 的大小必须在编译时知道。

有两种方法可以解决这个问题:

  1. 使用 std::vector<T*>而不是 std::array<T*, size> .

  2. 制作size模板参数:template <class T, int size> void selectionsort(T* data) .

什么更好取决于您实际想做什么。


请注意,我不确定您的代码是否真的按照您的预期执行。您似乎在使用 T*在你的函数参数中作为一种方式说“指向许多T s”的方式,而在你的selectionsort中函数你突然处理了一个 T 的集合指针。

换句话说,std::array<T*, size> (或 std::vector<T*> )是 T*集合,不是 T 的集合 。您可能想要使用 std::array<T, size> (或 std::vector<T> )然后使用 T*您在复制 T 的函数中收到的T* 的对象指向容器中。例如:

std::vector<T> myarray(data, data + size);

关于c++ - 模板类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com