我有一个函数,用来检查一个2d std::string数组中的所有行是否相等。
template <int sizeElements, int sizeArrays>
bool CheckEquality2dArray(const array<array<string, sizeElements>, sizeArrays> &my2dArray)
{
if (equal(my2dArray.begin() + 1, my2dArray.end(), my2dArray.begin()))
{
return true;
}
else
{
return false;
}
}
我使用的是模板,所以我可以传递列数(每个数组的元素)和行数(std:: arrays)。然后我可以在任何2d std::array上使用该函数。
我的问题是:我如何传递每行的元素数?
例如在一个2d std::数组 "myFirst2dArray "上。
if (checkArray.CheckEquality2dArray</*INSERT SOMETHING HERE*/, (int)myFirst2dArray.size()>(myFirst2dArray) == true)
{
//Do something
}
我不能做这样的事情 (int)myFirst2dArray[0].size()
. 我知道我可以通过使用向量来解决这个问题,但是有什么方法可以解决数组的问题吗?
这些是你的模板参数;你不需要传递它们,因为它们是类型的一部分。你只需要将数组传递给函数,因为编译器已经知道了尺寸。就像这样。
CheckEquality2dArray(myFirst2dArray);
我把模板参数改为:
template <size_t sizeElements, size_t sizeArrays>
然后我在使用函数时删除了模板参数(感谢molbdnilo),现在一切都正常了:)