我在main函数中创建了一个3d数组,因为它的一个大小来自于使用过的输入。我正在使用C ++
std::cin >> size;
typedef int T[8][3];
T* tables = new T[size];
基本上是tables[size][8][3]
现在我必须在不同的函数中使用这个3d表,并且必须将值存储到其中。通过将此表作为全局变量来实现此目的的最佳方法。但是我不确定在主要功能之后我能做到这一点。我有另一个选项,我必须将此表作为参数传递,并且必须在函数结束时返回该表。
我尝试了这两种方法,但我遇到了错误。请帮我解决这个问题。我不知道选择哪种方法以及如何做
提前谢谢。
**示例:**这是一个我真正想做的例子。这里我在main函数中创建了一个3d数组,通过另一个函数我给了该数组一些输入并再次在main函数中打印出来。
#include <iostream>
#include <conio.h>
using namespace std;
class M
{
public:
int i,j,k;
public:
int pass(int (*table)[8][3],int size);
}
int M:: pass(int (*table)[8][3],int s)
{
for (i=0;i<s;i++)
{
//int a = tables[i][2][1];
for(j=0;j<8;j++)
{
for(k=0;k<3;k++)
{
table[i][j][k]=i;
}
}
}
return (*table)[8][3]; // not sure about this
}
int main()
{
int size,i,j,k;
std::cin >> size;
typedef int T[8][3]; // T is your 2d array type
T* tables = new T[size];
cout << "test";
M mx;
mx.pass(tables,size); // not sure
for (i=0;i<size;i++)
{
for(j=0;j<8;j++)
{
for(k=0;k<3;k++)
{
cout<<tables[i][j][k];
cout<<" ";
}
cout<<endl;
}
cout<<endl;
cout<<"..........." << i <<endl;
}
getch();
}
答案 0 :(得分:0)
由于您要创建两个尺寸固定的动态3D数组,因此使用std::array<std::array<int, 3>, 8>
作为2D数组。使用std::vector<__2D_ARRAY_TYPE>
创建3D阵列。
#include <iostream>
#include <array>
#include <vector>
int main() {
std::array<std::array<int, 3>, 8> array_2d ;
std::vector<decltype(array_2d)> array_3d ;
int size = 4 ;
for(int i = 0; i < size; ++i)
{
for(int j = 0; j < 8; ++j)
for(int k = 0; k < 3; ++k)
array_2d[j][k] = j + k ;
array_3d.push_back(array_2d);
}
return 0;
}
这样的东西可以轻松使用,无需任何手动内存管理即可轻松完成工作。
您可以将其传递给函数。签名将是:
return_type function_name(const std::vector<std::array<std::array<int, 3>, 8>>& array_3d)
{ .... }
答案 1 :(得分:0)
在
class M
{
public:
int i,j,k;
public:
int pass(int (*table)[8][3],int size);
}
你不必两次上市。您可以将所有公开成员数据放在关键字public
。下
此外,您似乎在最后重新编写了您的功能。而不是
cout<<tables[i][j][k];
你可以写
cout<<*tables
答案 2 :(得分:0)
我不知道我是否完全理解你的问题。但是你绝对可以将指针本地存储在对象中并在其他地方引用它。像这样:
class M
{
public:
M(int(*tbl)[8][3]) : table(tbl) { }
int(*table)[8][3];
int i, j, k;
public:
void pass(int size);
};
void M::pass(int s)
{
for (i = 0; i<s; i++)
{
for (j = 0; j<8; j++)
{
for (k = 0; k<3; k++)
{
table[i][j][k] = i;
}
}
}
}
int main()
{
int size, i, j, k;
std::cin >> size;
typedef int T[8][3]; // T is your 2d array type
T* tables = new T[size];
cout << "test";
M mx(tables);
mx.pass(size); // not sure
for (i = 0; i<size; i++)
{
for (j = 0; j<8; j++)
{
for (k = 0; k<3; k++)
{
cout << tables[i][j][k];
// or you can also:
// cout << mx.table[i][j][k];
cout << " ";
}
cout << endl;
}
cout << endl;
cout << "..........." << i << endl;
}
_getch();
}