c++ - 可以采用不同维度数组的函数

标签 c++ multidimensional-array vector

有没有一种方法可以创建一个函数,该函数可以在不重载的情况下获取 vector 的任意维度?

目前我有,

someFunction(vector<int> a)
someFunction(vector<vector<int> > a)
someFunction(vector<vector<vector<int> > > a)

但是,是否可以有一个功能:

singleFunction(<n-dimension vector>)
{
    // Get dimension of array/vector
}

最佳答案

你可以使用递归模板函数

#include <iostream>
#include <vector>

void func(int el) {
  std::cout << el << std::endl;
}

template<typename T>
void func(std::vector<T> v) {
  for (const T& el : v) {
    func(el);
  }
}

int main() {
  std::vector<std::vector<int>> v {{1, 2}, {2, 3}};
  func(v);
  return 0;
}

它为每个元素调用它自己,直到它到达 int 类型的元素。

要获得维度,您可以使用相同的模式:

#include <iostream>
#include <vector>

template<typename T>
int someFunction(std::vector<T> v, int dim = 1);

template<>
int someFunction(std::vector<int> v, int dim) {
  return dim;
}

template<typename T>
int someFunction(std::vector<T> v, int dim) {
  return someFunction(T(), dim + 1);
}

template<typename T>
void singleFunction(std::vector<T> v) {
  int dim(someFunction(v));
  std::cout << dim << std::endl;
  // Do something
}

int main() {
  std::vector<std::vector<std::vector<int>>> v {{{1, 0}, {2, 4}}, {{2, 2}, {3, 0}}};
  singleFunction(v);
  singleFunction(std::vector<std::vector<int>>());
  singleFunction(std::vector<int>());
  return 0;
}

这里它创建了一个新的值类型对象,并调用自身直到它的值类型为int。每次它都会增加维度。

关于c++ - 可以采用不同维度数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50743158/

相关文章:

c++ - 行列式中的段错误(核心已转储)

C++ 非静态数据成员的无效使用

c++ - 传递给函数错误的 vector 迭代器

c++ - Visual Studio 2010,C++,vector.clear() 期间的 "vector iterators Incompatible"

c++ - 为什么将对象 move 到 vector 时会得到额外的 move 构造函数操作?

c++ - 好的 C++11 信息,除了维基百科?

c++ - C/C++ : Constant array of constant arrays

c - 如何将 PPM 文件读入标准输入

arrays - 如何使用 ndarray 从向量的向量创建二维数组?

c++ - 使用 C++/MFC 缩放图像