return 来自下标运算符重载的数组
return an array from subscripting operator overload
我刚开始使用 C++,我有这个方法,我重载了下标运算符“[]”,但我需要 return 来自该方法的数组,在该方法中,我正在尝试到 return 来自更大数组的子数组,但我似乎无法 return 整个数组,因为我只能 return 来自数组的单个元素,我如何获得该方法到 return 整个数组?
例如:
int& PagedArray::operator [] (int position){
if(position == 0){
for(int i = 0; i < 256; i++){
pageArray[i] = completeArray[i];
//cout << to_string(i) + " " + to_string(pageArray[i]) << endl;
}
return pageArray[0] ;
}
}
当我尝试 return 时,我只能从数组 pageArray 中获取特定元素,但我需要 return pageArray,我该如何完成?
谢谢
I need to return an array from that method
int& PagedArray::operator [] (int position)
您为函数提供的 return 类型与您需要 return 的类型不匹配。这个函数 returns 是一个整数的引用;不是数组。
你需要的一个问题是你不能在 C++ 中 return 一个数组;这在语言中是不允许的。也就是说,return类型不能是数组。然而,有一种相当简单的方法可以解决这个问题:您可以 classes 的 return 个实例,并且可以将数组存储为 class 的成员。标准库中有一个用于此类数组包装器 class 的模板。它被称为 std::array
。
这里是一个 return 子数组的例子:
constexpr std::size_t page_size = 256;
std::array<int, page_size>
PagedArray::operator[] (int){
std::array<int, page_size> page;
std::copy(completeArray, page);
return page;
}
鉴于您最初尝试 return 引用,您可能正在寻找一种方法来避免使用间接复制子数组。一个问题是子数组在调用该函数之前不存在于任何地方,并且您不能 return 对您在函数中创建的内容的引用。
您可以 return 指向大数组的子范围,而不是 return 对小数组的引用。标准库中实际上有不止一种选择。有一个通用的 std::ranges::subrange
和特定于连续范围的 std::span
。我建议使用更具体的类型,假设您没有对大容器的类型进行模板化。示例:
std::span<int, page_size>
PagedArray::operator[] (int){
return {completeArray, page_size};
}
我刚开始使用 C++,我有这个方法,我重载了下标运算符“[]”,但我需要 return 来自该方法的数组,在该方法中,我正在尝试到 return 来自更大数组的子数组,但我似乎无法 return 整个数组,因为我只能 return 来自数组的单个元素,我如何获得该方法到 return 整个数组?
例如:
int& PagedArray::operator [] (int position){
if(position == 0){
for(int i = 0; i < 256; i++){
pageArray[i] = completeArray[i];
//cout << to_string(i) + " " + to_string(pageArray[i]) << endl;
}
return pageArray[0] ;
}
}
当我尝试 return 时,我只能从数组 pageArray 中获取特定元素,但我需要 return pageArray,我该如何完成?
谢谢
I need to return an array from that method
int& PagedArray::operator [] (int position)
您为函数提供的 return 类型与您需要 return 的类型不匹配。这个函数 returns 是一个整数的引用;不是数组。
你需要的一个问题是你不能在 C++ 中 return 一个数组;这在语言中是不允许的。也就是说,return类型不能是数组。然而,有一种相当简单的方法可以解决这个问题:您可以 classes 的 return 个实例,并且可以将数组存储为 class 的成员。标准库中有一个用于此类数组包装器 class 的模板。它被称为 std::array
。
这里是一个 return 子数组的例子:
constexpr std::size_t page_size = 256;
std::array<int, page_size>
PagedArray::operator[] (int){
std::array<int, page_size> page;
std::copy(completeArray, page);
return page;
}
鉴于您最初尝试 return 引用,您可能正在寻找一种方法来避免使用间接复制子数组。一个问题是子数组在调用该函数之前不存在于任何地方,并且您不能 return 对您在函数中创建的内容的引用。
您可以 return 指向大数组的子范围,而不是 return 对小数组的引用。标准库中实际上有不止一种选择。有一个通用的 std::ranges::subrange
和特定于连续范围的 std::span
。我建议使用更具体的类型,假设您没有对大容器的类型进行模板化。示例:
std::span<int, page_size>
PagedArray::operator[] (int){
return {completeArray, page_size};
}