开发者问题收集

传递 std::array

2020-06-12
31

我知道这个主题存在一些问题,但到目前为止没有人回答我的问题。我发现定义一个接受任意长度的 std::array 的函数有点复杂。

下面的示例是执行此操作的唯一方法(不包括将长度作为额外参数传递)吗?

  1. 下面的示例真的是执行此操作的唯一方法(不包括将长度作为额外参数传递)吗?
  2. 如果是这样,这是一种好的做法吗?
  3. 我听说如果可能的话应该避免使用模板(关于调试等)。那么用 std::vector 解决整个问题是否更好?访问时间应该不会相差太大,不是吗?
template <typename T, size_t N>
void addstdArray(std::array<T, N> &arr) {

    for(int i : arr) {
        arr[i]++;
    }
}
1个回答
  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) {    
   // ...
}

这样,您几乎可以匹配所有内容,而不仅仅是每个维度的标准数组

  1. If so, is it a good practice?

取决于您的需求,但一般来说,我认为没有禁忌症。

  1. 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