Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在多个成员阵列上构建整合视图?_C++_C++11 - Fatal编程技术网

C++ 如何在多个成员阵列上构建整合视图?

C++ 如何在多个成员阵列上构建整合视图?,c++,c++11,C++,C++11,成员函数接收对象,每个对象具有两个或多个相同类型的数组(C样式,T[])。如何将一个对象的数组映射为一个对象?例如的-循环可用于迭代“串联”数组。对象具有相同的分类器。不能假定数组元素位于连续的内存空间中。不得实际复制或移动阵列元素 我想用它。可以定义。根据: 编译器非常了解数组相对于完整对象的偏移量,以及数组中数组元素的偏移量,并且编译器知道如何添加 例如,在下面的代码中,我尝试为成员函数process()完成它: #包括 使用名称空间std; constexpr size\u t As=3;

成员函数接收对象,每个对象具有两个或多个相同类型的数组(C样式,
T[]
)。如何将一个对象的数组映射为一个对象?例如的
-循环可用于迭代“串联”数组。对象具有相同的分类器。不能假定数组元素位于连续的内存空间中。不得实际复制或移动阵列元素

我想用它。可以定义。根据:

编译器非常了解数组相对于完整对象的偏移量,以及数组中数组元素的偏移量,并且编译器知道如何添加

例如,在下面的代码中,我尝试为成员函数
process()
完成它:

#包括
使用名称空间std;
constexpr size\u t As=3;
constexpr size_t Bs=2;
结构部件
{
字符a[As]={'a','B','C'};
字符b[Bs]={'D','E'};
};
类处理器
{

void run(const char&o)const{cout由于几个原因,这无法实现

首先,数组元素必须位于连续的内存空间中

此外,如中所述:

访问数组中的项是访问普通int的另一个间接层次


根据:[定义对成员数据的某种双重间接寻址]无法使用该语言。

不清楚真正的问题是什么。如果
a
b
是不同的数组,显然,您不能在不复制副本的情况下直接在连续范围内迭代它们的串联。如果您想像在单个数组中一样迭代
a
b
,您可以可以创建一个自定义迭代器,类似于
std::deque
的迭代器-当它到达
a
的最后一个元素之后的迭代器时,它会转到
b
的第一个元素。我不明白为什么不能这样做(如您在回答中所述),也不是,这与成员指针有什么关系。我认为至少有三种方法可以做到这一点。@churill,你能给出一个答案,列出可能的解决方案吗?我很想听听你的想法。