传递 std::array
2020-06-12
31
我知道这个主题存在一些问题,但到目前为止没有人回答我的问题。我发现定义一个接受任意长度的 std::array 的函数有点复杂。
下面的示例是执行此操作的唯一方法(不包括将长度作为额外参数传递)吗?
- 下面的示例真的是执行此操作的唯一方法(不包括将长度作为额外参数传递)吗?
- 如果是这样,这是一种好的做法吗?
- 我听说如果可能的话应该避免使用模板(关于调试等)。那么用 std::vector 解决整个问题是否更好?访问时间应该不会相差太大,不是吗?
template <typename T, size_t N>
void addstdArray(std::array<T, N> &arr) {
for(int i : arr) {
arr[i]++;
}
}
1个回答
- Is the example below really the only way (excluding passing the length as an extra parameter) to do this?
不。
一种可能的替代方案如下
template <typename T>
void addstdArray (T & arr) {
// ...
}
这样,您几乎可以匹配所有内容,而不仅仅是每个维度的标准数组
- If so, is it a good practice?
取决于您的需求,但一般来说,我认为没有禁忌症。
- I have heard that one should avoid templates if possible (regarding debugging etc.). Is it better to solve the whole thing with std::vector then? The access times should not differ that much, should they?
标准 C++(和标准库)很大程度上基于模板。
std::vector
是另一个非常有用的标准模板类的示例。
std::array
可能会更好或更坏,具体取决于您的需求。
不:我认为最好避免使用模板。
max66
2020-06-12