采用通用数组类型的函数

时间:2018-04-13 10:28:26

标签: c++

我想创建一个类似数组类型的函数(例如std :: vector,std :: array,C array,...等)。我的函数体只要求参数有一个下标operator [],它返回一个特定的类型。 例如,假设我想编写以下函数,有没有办法只编写一次代码而不是重复相同的代码三次?

AddOne(std::array<double> &array, int size){
  for(int i=0;i<size;i++){
  array[i] += 1;
}
AddOne(std::vector<double> &array, int size){
  for(int i=0;i<size;i++){
  array[i] += 1;
}
AddOne(double *array, int size){
  for(int i=0;i<size;i++){
  array[i] += 1;
}

提前致谢!

1 个答案:

答案 0 :(得分:3)

是的,这就是模板的用途:

template<typename T>
AddOne(T &array, int size){
  for(int i=0;i<size;i++) {
    array[i] += 1;
  }
}

请注意,您无需明确指明该类型需要[]运算符。这将在使用模板的每个位置进行检查(这可能导致C ++臭名昭着的不可读的编译错误)。

更惯用的方法是传递一对迭代器:

template<typename T>
AddOne(T begin, T end) {
  for (; begin != end; begin++) {
    (*begin) += 1;
  }
}

例如std::vector,您需要致电AddOne(my_vector.begin(), my_vector.end())。对于原始数组,您只需传递指针,例如AddOne(my_array, my_array + size)