【问题标题】:How does subscripting std::array multiple times work?多次下标 std::array 是如何工作的?
【发布时间】:2014-11-04 07:28:44
【问题描述】:

即使所有operator[]returns 都是引用,但不使用任何代理对象(如here 所示),多次下标如何为std::array 工作?

例子:

#include <iostream>
#include <array>

using namespace std;

int main()
{

    array<array<int, 3>, 4> structure;
    structure[2][2] = 2;
    cout << structure[2][2] << endl;

    return 0;
}

这是如何/为什么起作用的?

【问题讨论】:

  • 对引用执行操作时,您对它们引用的对象执行操作。
  • 您链接到的示例显示了如何使用代理对象,以便当您有一个建模多维数组的单个对象时,您可以多次为对象下标。使用array&lt;array&lt;T, N&gt;, M&gt;,您实际上有一个数组数组,因此下标外部对象会返回对数组的引用,然后您可以下标。不需要代理,因为这种情况要简单得多!
  • 当你有一个指针int*p,你可以计算p+6+2。同样的事情。

标签: c++ c++11 multidimensional-array stl


【解决方案1】:

您只需调用structure.operator[](2).operator[](2),其中第一个operator[] 返回对structure 中第三个数组的引用,第二个operator[] 应用到该数组。

请注意,可以像使用对象本身一样使用对对象的引用。

【讨论】:

    【解决方案2】:

    正如您所说,structure[2] 提供了对外部数组元素的引用。作为一个引用,它可以被当作一个相同类型的对象来对待。

    该元素本身是一个数组 (array&lt;int,3&gt;),可以对其应用进一步的 []。这给出了对内部数组元素的引用,类型为int

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 2013-06-15
      • 2012-12-15
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多