【问题标题】:An array of alias variables in c++ [closed]c ++中的别名变量数组[关闭]
【发布时间】:2017-11-21 17:30:10
【问题描述】:

我想创建一个包含另一个数组的变量的数组,并且这些变量应该被复制为别名(即不是通过值)。

例如

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];

这里,数组zxy 的引用组成。在“z”中所做的更改将在 xy 中看到,反之亦然。

我需要什么:
2) z 现在是指向整数的指针数组。如何将其转换为整数数组?

3) 由于指针难以管理,如何获得与向量相同的功能。据我所知,向量不能存储引用。

【问题讨论】:

  • std::reference_wrapper 有帮助吗?
  • 我不明白你的问题是什么 1)。您已经在运行时分配了z。 2) z 不是整数指针数组。
  • std::vector 替换原始指针。
  • @user8153630 您可以使用相同的语法 z[0] =&x[0]; z[1] = &x[1];等等。除了您需要分配数组,如 int ** z = new int * [N];
  • @VladfromMoscow,好的,谢谢。

标签: c++ arrays pointers vector reference


【解决方案1】:

代替这段代码sn-p

 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 *> 而不是数组。

【讨论】:

    【解决方案2】:

    数组的概念是内存是顺序的。这意味着每个元素都在另一个元素之后。(例如,arr[0] 是第一个元素的地址,这与*arr 相同。如果您需要第二个元素,您将输入arr[1],即(*arr)+1) . 如果要创建一个包含其他两个数组元素的数组,则必须创建第三个数组并复制值 (z[0] = a[0];...) 对于动态分配,您可以使用具有接受整数值的构造函数的向量。 std::vector<int> z = std::vector<int>(a.size() + b.size())

    这是不存储指针的唯一方法。 请注意,如果您将某些内容从容器 a 复制到容器 b,然后在容器 a 中进行更改,则容器 b 中不会更改。

    【讨论】:

    • 1) 向量不能存储引用。您需要将它们包装在 std::reference_wrapper 中。 2) ref 不是 受限指针。它是特定对象的别名,其作用不同于指针,尤其是指针。关于对象复制。您的编译器可能将 refs 实现为指针作为实现细节;但从 C++ 语言的角度来看,指针和引用是不同的概念,这样思考它们是个好主意。 3)您的矢量示例是伪代码吗?缺少一些模板参数。 4) 你到底为什么要new std::vector!?
    • 我应该回答你的问题还是你只是在纠正我的答案?
    • 这主要是为了更正。但是,如果您有一个有效的 new 向量用例,我真的很感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2022-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多