如何在运行时创建一个由N个整数组成的元组
How to create a tuple of N integers in runtime
我需要一种通用的方法来在运行时创建一个由N个整数组成的元组,其中N是向量的大小(不超过20)。例如:
int main() {
vector<int> vec;
vec.push_back(31);
vec.push_back(24);
auto x = MakeTuple(vec.size()); // x should have the type tuple<int,int>
return 0;
}
编辑:只是为了澄清。。。我不能坚持使用向量,因为我需要元组类型来使用lambda表达式创建TBB流图模板类的对象。
第二版:很明显,我需要解释一下这个问题。我有非结构化网格,我将其动态划分为X个分区。这些分区中的每一个都与N个其他分区相连,其中N>1。这些连接定义了分区之间的依赖关系,我需要使用这些依赖关系来构建流图。由于网格的结构只有在运行时才知道,因此依赖结构也是如此。因此,我需要一种方法来创建特定的图节点(TBB类),它将表示输入依赖关系的元组作为模板参数。
下面是一个如何创建具有两个输入依赖项的TBB功能节点的示例:
using namespace tbb:flow;
function_node<tuple<int,int> > *f =
new function_node<tuple<int,int>>(g, 1, [=] (tuple<int,int> input) -> void { ... });
join_node<tuple<int,int> *j = new join_node<tuple<int,int>> (g);
make_edge(*j, *f);
现在,假设我们将网格划分为10个分区。我们通过检查边列表来确定每个分区的依赖关系。如果有一条边连接两个分区,比如part1和part2,那么这些分区之间存在依赖关系。我使用每个分区向量收集依赖关系信息。现在问题出现了:我需要使用这个依赖关系信息(存储在向量中)来创建一个函数节点的图,这些函数节点需要基于分区依赖关系的数量的适当元组类型。例如,如果part1和part2具有以下依赖项[2,4,5,9]和[1,3],那么我需要这两个功能节点:
function_node<tuple<int,int> > *f1 =
new function_node<tuple<int,int>>(g, 1, [=] (tuple<int,int> input) -> void { ... });
function_node<tuple<int,int,int,int> > *f2 =
new function_node<tuple<int,int,int,int>>(g, 1, [=] (tuple<int,int,int,int> input) -> void { ... });
Tuple"dimensions"是类型的一部分(通过模板),您不能在运行时从动态选择的值中选择类型。
坚持你的矢量。
由于它必须是一个元组,并且您对长度有限制,因此您可以使用工厂方法,如以下psudo代码
generic_type MakeTuple(size_t n) {
switch(n) {
case 1:
return make_tuple(int);
case 2:
return make_tuple(int, int);
...
default:
throw 'oh crap';
}
相关文章:
- 从二进制文件中读取整数数组
- 新的整数数组向右移动?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 从两个 4x64 位整数数组中获取取模
- 字符到整数数组
- 从函数参数 [C++] 复制整数数组
- 指向整数数组和打印总和的指针
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 线程安全整数数组?
- 整数数组中最长的回文
- 在大整数数组中查找子数组
- 查找整数数组中最接近的数字
- 创建<int>对整数数组指针的矢量引用 (C++)
- 整数指针数组的元素是否可以指向整数数组?
- 如何将整数数组相乘得到一个数字?
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 将文本文件读入整数数组