是否有可能获得对数组元素的稀疏(非连续)引用子集?
假设我有数组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;
}
答案 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:
不应引用引用,也不引用引用数组, 并没有指向参考的指针。
但是你可以拥有一个带有referance成员的类的容器数组(在约束器上初始化)并实现一个=运算符,如果它值得付出努力