【发布时间】:2018-09-29 02:34:27
【问题描述】:
我想在更大的内存中读/写一些特定范围的内存,基本上我想做这样的事情:
std::array<int, 1024> big_array;
unsigned short int offset = 128;
template<std::size_t SIZE>
void ReadArray(std::array<int, size>& big_array_with_address_offset)
{
// ... some code in here
}
ReadArray(big_array + offset); //--> This doesn't work
我能够为我正在处理的另一个函数(下面的代码)做类似的事情,使用原始指针作为函数参数,但我正试图以现代 C++(11 on wards)的方式来做这件事,因为我需要使用std::array。 我不想使用原始指针作为函数参数。
int FindMinElement(int * array)
{
// Min element from range: 128 to 384
return *std::min_element(array, array+256);
}
FindMinElements(big_array.data()+128);
注意1:我能够在函数参数中使用较小的std::array 的唯一方法是使用template<std::size_t SIZE>,否则由于大小不兼容,我会出现编译错误。
注意2:我不想使用std::vector 执行此操作,因为我需要静态内存而不是动态内存。
【问题讨论】:
-
使用迭代器。它们允许您定义要复制的范围。它们还与
std::copy一起使用,因此您可以使用它将元素从一个数组复制到另一个数组。这几乎是对您之前的一个问题的欺骗:stackoverflow.com/questions/52431819/… -
std::span(在 C++20 中)可能会有所帮助,否则传递迭代器而不是容器。 -
如果要传递容器,那么也传递偏移量。