如何读/写或遍历 std::array 中的特定元素范围?
How to read/write or iterate through a specific range of elements within a std::array?
我想在更大的内存中读/写一些特定范围的内存,基本上我想做这样的事情:
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 个(方式执行此操作,因为我需要使用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
来做这件事,因为我需要静态内存而不是动态内存。
将数组在offset
元素处的地址传递给FindMinElement
函数。请参阅以下示例了解如何执行此操作:
#include<iostream>
#include<array>
#include<algorithm>
using namespace std;
std::array<int, 1024> big_array;
unsigned short int offset = 128;
int FindMinElement(int *array)
{
// Min element from range: 128 to 384
return *std::min_element(array, array+256);
}
int main(void)
{
int counter = 0;
for(auto & i : big_array) //populates the array from 0 to 1023
{
i = counter++;
}
cout << "Min element in the range 128 to 384 is: ";
cout << FindMinElement(big_array.begin() + 128) << endl;
}
输出:
Min element in the range 128 to 384 is: 128
将迭代器发送到数组的开头,而不是在数组中发送。
你的 FindMinElement 函数收到一个指针,而不是一个真正的数组。发送迭代器是最接近的等效项。
我终于弄清楚了,这就是我想要实现的目标,也是我的意思是使用迭代器和没有原始指针的现代C++,P.W. 答案接近我想要实现的目标:
short int FindMinElement(std::array<short int, 1>::iterator it);
{
// Min element from range: 128 to 384
return *std::min_element(it, it + 128);
}
int main()
{
std::array<int, 1024> big_array{{0}};
unsigned short int offset = 128;
short int minval = 0;
// Asuming big_array is populated in some other place before calling FindMin..()
minval = FindMinElement(std::begin(big_array) + offset);
return 0;
}
我希望能够在不使用原始指针的情况下操作数据,然后解决方案是使用迭代器作为参数而不是指针。
这也解决了 NOTE1 中提到的编译错误,即我在将较大的 std::array 的引用传递给较小的 std::array 函数参数时遇到的编译错误
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++基于范围的 for 循环和元素副本
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 如何读/写或遍历 std::array 中的特定元素范围?
- 基于相邻元素 c++ 的分段误差范围的循环
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 对于多个查询,查找在 l 到 r 范围内具有相同元素的最长公共子数组
- 我应该如何使用remove_if删除两个数字范围内的元素
- 从给定范围内的向量中查找最大元素
- 忽略元素的基于范围的 for 循环
- 包含每个 k 个列表中至少 1 个元素的最小元素范围的时间复杂度
- 矢量擦除范围内的元素
- 使用std :: lower_bound()打印元素范围以下某些值以下
- 迭代向量中属性具有特定值的元素范围
- 编辑2d数组中的元素范围
- 将元素范围从字符数组提取到字符串中
- 在C++中以相同的方式同时对两个元素范围进行分区
- 如何使用存储在列表中的特定元素范围初始化向量
- 对元素范围从0到9999的数组进行排序