我正在使用C ++ 17创建具有以下输入结构linspase
的标题为linspace(double upper, double lower, int size)
的函数。该函数应在size
和lower
之间创建upper
等间距的数字。对该功能进行编程很容易;但是,我希望它创建一个std::array<double, size>
,在该函数中,函数将通过函数调用确定数组大小,并传回数据类型std::array<double, size>
。我知道模板是执行此操作的唯一方法,但是我不确定如何构建模板。在一般的伪代码中,我认为它看起来像这样。
template <typedef T, size_t size>
T linspace(double lower, double upper, int num)
{
/* ... Function meat goes here to create arr of size
num of evenly space numbers between lower and upper
*/
return arr
}
但是,我知道此模板声明不正确,并且我不确定它的外观。需要明确的是,我希望它返回特定大小的std:;array
,而不是std::vector
。
答案 0 :(得分:4)
如果(正确地)将数组大小作为模板参数传递,则不需要将其作为函数参数之一,因此:
template <size_t size>
auto linspace(double lower, double upper) -> std::array<int, size>
{
std::array<int, size> arr{};
//populate the array ...
return arr;
}
由于您使用的是c ++ 14,因此可以完全摆脱返回值,并拥有一个像这样的原型:
template <size_t size>
auto linspace(double lower, double upper)
然后您可以像这样使用它:
auto arr = linspace<1>(0, 1);
for(auto a : arr)
{
std::cout << a << std::endl;
}