我想创建一个包含另一个数组变量的数组,并且应该将变量复制为别名(即不是值)。
例如
int* x;
int* y;
int* z[4]; // What should I do if length of z is not known initially.
x =new int[2];
y= new int[2];
x[0]=1;
x[1] =2;
y[0]=3;
y[1]=4;
z[0] =&x[0];
z[1] = &x[1];
z[2] =&y[0];
z[3] =&y[1];
此处,数组z
由x
和y
的引用组成。 “z”中的更改将在x
和y
中显示,反之亦然。
我需要什么:
2)z
现在是整数指针数组。如何将其转换为整数数组?
3)由于指针很难管理,我如何使用向量获得相同的功能。据我所知,矢量不能存储引用。
答案 0 :(得分:1)
数组的概念是内存是顺序的。这意味着每个元素都在另一个元素之后。(例如arr[0]
是第一个元素的地址,这与*arr
相同。如果你需要第二个元素,你将输入arr[1]
这是(*arr)+1
)。
如果要创建包含两个其他数组元素的数组,则必须创建第三个数组并复制值(z[0] = a[0];
...)
对于动态分配,您可以使用具有接受整数值的构造函数的vector。 std::vector<int> z = std::vector<int>(a.size() + b.size())
这是在不存储指针的情况下执行此操作的唯一方法。 请注意,如果您将容器a中的某些内容复制到容器b,然后在容器中更改它,则容器b中的内容不会更改。
答案 1 :(得分:0)
取代此代码段
int *z;
z = new int[N]; //N is integer.
z = &x[0];
你应该写
int **z;
z = new int * [N]; //N is integer.
z[0] = &x[0];
或者您可以使用类模板std::vector<int *>
而不是数组。