获取数组的稀疏子集作为引用

时间:2016-11-07 09:30:36

标签: c++ arrays

是否有可能获得对数组元素的稀疏(非连续)引用子集?

假设我有数组a = [1,4,5]和索引pos = [0,1]。我希望b = [1,5]无需复制a中的元素。换句话说,我想切入a并创建一个名为b的视图。

自“表达式无法分配”以来出现以下错误:

#include <array>

int main() {
  std::array<double,3> a = {1, 4, 5};
  std::array<double, 2> b;
  int c = 0;
  int pos[2] = {0,2};
  for (auto i = a.begin(); i != a.end(); i++) {
    &b[c] = i;
    i++;
  }
  return 0;
}

2 个答案:

答案 0 :(得分:1)

您不能在容器中拥有直接引用。但是,如果您可以访问C ++ 11 you can use std::reference_wrapper

#include <iostream>
#include <functional>
#include <vector>
#include <array>

int main() {
  std::array<double,3> a = {1, 4, 5};
  std::vector<std::reference_wrapper<double>> b;
  int pos[2] = {0,2};
  for (unsigned int i = 0; i < sizeof(pos) / sizeof(pos[0]); ++i) 
  {
      b.emplace_back(a[pos[i]]);
  }

  for(const auto& viewer: b)
  {
      std::cout << viewer << "\n";
  }
}

否则,只需使用double*

答案 1 :(得分:0)

C ++标准8.3.2 / 4:

  

不应引用引用,也不引用引用数组,   并没有指向参考的指针。

Answered here

但是你可以拥有一个带有referance成员的类的容器数组(在约束器上初始化)并实现一个=运算符,如果它值得付出努力