具有公共内存区域的类似数组的对象

Array-like objects with common memory region

本文关键字:数组 对象 区域 内存      更新时间:2023-10-16

我希望有类似数组的对象,支持指向同一内存区域的多个数组。带有旧原始指针的东西看起来像这样:

#include <iostream>
int main()
{
double* array{new double[100]};
double* subarray{array + 5};
std::cout << array[5] << std::endl;
subarray[0] = 33.0;
std::cout << array[5] << std::endl;
delete[] array;
return 0;
}

看起来像的东西

Foo array{100, 3.0};
Foo subarray{array.slice(40,50)};
assert(&array[43] == &subarray[3]);

据我所知,像std::vectorstd::valarray这样的事情需要将小节复制到一个新对象中,这不是我想要的。我找不到其他任何东西。我很高兴实施自己的解决方案,但是有什么我可以使用的吗?

现代C++做这种事情的方法是使用一对迭代器。我相信 Boost 有一个库基本上可以做你所描述的,但所有的 STL 算法都在迭代器对上工作,以允许你做你所描述的。因此,如果你想谈论std::d eque从元素10到元素20(当然是半开放(的范围,你可以使用std::begin(d) + 10std::begin(d) + 20作为你的范围。