我有很多不同大小的数组,所以就我所知,它们不能是多维数组,所以我将它们命名如下:
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等。
我试过,点,逗号,斜线等等。
答案 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