清除任意2D数组
Clear an arbitrary 2D array
我正在研究一些嵌入式代码,我不能使用STL容器。我有几个2D数组,它们的大小在编译时是已知的,我想写一个模板函数来清除它们。然而,我不能让它工作。下面是我的尝试:
template <std::size_t sizeA, std::size_t sizeB>
void clearArray(float a[sizeA][sizeB])
{
float* begin = &a[0][0];
std::fill_n(begin, sizeA * sizeB, 0.0);
}
int main()
{
float f[5][6];
clearArray(f);
for (int i = 0; i < 5; ++i)
for (int j = 0; j < 6; ++j)
cout << f[i][j] << " ";
}
但是,编译器不能成功地执行参数查找:
test.cpp(22):错误C2784: 'void clearArray(float [sizeA][sizeB])':无法从'float[5][6]'中推断出'float [sizeA][sizeB]'的模板参数'1> test.cpp(13):参见'clearArray'的声明
有办法做到这一点吗?我知道我可以使用sizeof(f)/sizeof(float)
来获得元素的数量,或者我可以手动指定维度,但我希望使它尽可能简单。
另外,我在VS2012中测试了这个,但是这个嵌入式系统的编译器不支持c++ 11。
当你将数组传递给函数时,它将衰减为指针(在这种情况下它将变成float (*a)[sizeB]
,关于大小的信息将丢失,这就是编译器无法推断模板参数的原因。您可以将它从按值传递改为按引用传递,这将保持数组的大小:
template <std::size_t sizeA, std::size_t sizeB>
void clearArray(float (&a)[sizeA][sizeB])
生活相关文章:
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何打印 2D 字符数组C++
- 如何将数组 2d 作为参数从函数传递并返回数组 2d 此函数
- 数组 2D 多个值
- 创建数组数组 (2D),而无需在 Java 中初始化内部数组
- 如何在C++中将文本文件传输到数组2D
- 从同一类的另一个方法调用数组2D-C++
- 获取地址在数组2d中的位置