c++ - 从下标运算符重载中返回一个数组
问题描述
我开始使用 c++,我有这个方法,我重载下标运算符“[]”,但我需要从该方法返回一个数组,在该方法中,我试图从一个更大的数组返回一个子数组但我似乎无法返回整个数组,因为我只能从数组中返回单个元素,我怎样才能获得返回整个数组的方法?
例如:
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] ;
}
}
当我尝试返回时,我只能从数组 pageArray 中获取特定元素,但我需要返回 pageArray,我该如何完成呢?
谢谢
解决方案
我需要从该方法返回一个数组
int& PagedArray::operator [] (int position)
您为函数提供的返回类型与您需要返回的类型不匹配。这个函数返回一个整数的引用;不是数组。
你需要的一个问题是你不能在 C++ 中返回一个数组。这在语言中是不允许的。也就是说,返回类型不能是数组。但是,有一个相当简单的方法可以解决这个问题:您可以返回类的实例,并且可以将数组存储为类的成员。标准库中有此类数组包装类的模板。它被称为std::array
。
以下是返回子数组的示例:
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;
}
鉴于您最初尝试返回引用,您可能正在寻找一种方法来避免使用间接复制子数组。一个问题是子数组在调用函数之前不存在任何地方,并且您无法返回对您在函数中创建的内容的引用。
您可以返回指向大数组的子范围,而不是返回对小数组的引用。标准库中实际上有不止一个选项。有一个通用目的std::ranges::subrange
,也std::span
特定于连续范围。假设您没有对大容器的类型进行模板化,我建议使用更具体的类型。例子:
std::span<int, page_size>
PagedArray::operator[] (int){
return {completeArray, page_size};
}
推荐阅读
- android - 每次单击浮动操作按钮时是否可以更改其颜色?
- sql-server-2016 - 合并和逗号分隔的行
- python - Python - Google Firebase 中的复杂查询
- typescript - 数组元素到接口属性
- python - 报告 API v4 非常慢
- c++ - 无限模板递归,因为只有 gcc 没有 bool 表达式优化
- javascript - 在 twig 和 symfony 中使用 onclick 调用 js 函数
- c# - 实体类型 ApplicationUser 不是当前上下文模型的一部分(重复)
- json - Getting error when using Decodable for JSON - Swift
- modal-dialog - 如何在 oracle apex 的交互式网格中单击保存按钮时创建警告弹出窗口