我正在学习用于查找数组中元素数量的技巧(以便我可以开始编写排序算法,而不需要将数组的长度作为数组传递参数),但在本教程中,这条线显示为模板声明:具有多个类型名称的C++模板
template <typename T, size_t N>
老实说,我不知道,你可以在一个模板声明声明多个typenames,但还什么“为size_t N”呢?这是模板声明中的变量声明吗?
我正在学习用于查找数组中元素数量的技巧(以便我可以开始编写排序算法,而不需要将数组的长度作为数组传递参数),但在本教程中,这条线显示为模板声明:具有多个类型名称的C++模板
template <typename T, size_t N>
老实说,我不知道,你可以在一个模板声明声明多个typenames,但还什么“为size_t N”呢?这是模板声明中的变量声明吗?
size_t
是类似于unsigned int
的类型。把它放在模板参数中意味着你通过了一个size_t
,而不是一个类型。 N
可能代表数组的大小,它是一个无符号值。例如:
template<typename T, size_t N>
void zeroArray(T (&arr)[N]) { //arr is a reference to an array
std::fill(arr, arr + N, 0); //of N elements of type T
}
int main() {
int arr[3];
zeroArray<int, 3>(arr);
}
在这个例子中,我可能会说:
zeroArray(arr);
因为这两个模板参数推导。
“size_t N”做什么?这是模板声明中的变量声明吗?
是的,基本上。
模板参数可能是整数类型的类型或值。还有一些其他的东西,他们就可以了,太(见[C++11: 14.3.2/1]
),我不会把它们称为“变量” 本身,但是......
反正值可以推断一样的类型,太,因此:
template <typename T, size_t N>
size_t array_size(const T (&)[N])
{
return N;
}
int main()
{
int x[5];
char y[10];
std::string z[20];
std::cout << array_size(x) << ',' << array_size(y) << ',' << array_size(z) << '\n';
}
输出:5,10,20
。
完美有效。
No size_t表示您正在使用size_t类型的整数值创建模板,如果您使用编译时数组(通常为小N),这可以帮助您。 您必须明白'typename T'意思是T是模板中泛型类型的占位符。 – linello
size_t是一种无符号类型,用于包含某种类型的大小,例如以字节数或字符数表示的缓冲区大小。 –
请注意['std :: array'](http://en.cppreference.com/w/cpp/container/array)和['std :: extent'](http://en.cppreference.com/瓦特/ CPP /类型/程度)。这些可能会帮助你以及数组中元素的数量。 – dyp