从c ++中的变量构造变量名

时间:2014-09-23 14:51:06

标签: c++

我有很多不同大小的数组,所以就我所知,它们不能是多维数组,所以我将它们命名如下:

arr1[]
arr2[]
arr3[]
arr4[]
...

现在我可以使用for循环来检查它们并访问它们......

for(int i=1; i<5; i++) {
    for(int j=o; i<etc; j++) {
     cout<<arr[i][[j]<<endl;
    }
}
or cout<<arr+i<<endl;

现在这显然告诉编译器将arr和i加在一起,但这不是我想要的。我想要它打印arr1,arr2等。

我试过,点,逗号,斜线等等。

3 个答案:

答案 0 :(得分:4)

不。需要一个数组。更具体地说,您需要一个异类容器。

借助间接的魔力,您实际上可以在C ++级别使用同源容器来实现这些语义:

std::vector<std::vector<WhateverYourTypeIs>> v;

如果你真的只需要外部数组中的五个,这将完成这项工作:

std::array<std::vector<WhateverYourTypeIs>, 5> a;

并简化您的代码。

答案 1 :(得分:3)

如果您真的被迫使用普通数组(并且只有那时),请考虑使用指针数组:

int* const array[] = {arr1, arr2, arr3, arr4, ...};

因此,您将获得一个指向arr#数组array+#的第一个元素的指针。

您可能还需要一个存储元素计数的伴随数组:

size_t carray[] = {sizeof arr1/sizeof *arr1, sizeof arr1/sizeof *arr2,
    sizeof arr1/sizeof *arr3, sizeof arr1/sizeof *arr4, ...};

另外,look at this for a safer way to get the element-count of an array

template<size_t N, class T>
constexpr size_t element_count(T (&arr)[N])
{return N;}

答案 2 :(得分:0)

您正在混淆编译/构建时间和运行时。我想只使用像数组/向量这样的运行时对象。

但您也可以使用宏或变量参数列表: http://www.cprogramming.com/tutorial/c/lesson17.html