如何使用下标运算符中指定的值做一些事情
How to do some stuff with values assigned in subscript operator?
假设我有数据数组0,0,1,1,2,5,7,7,2,2作为类中的数据成员,并且我想在其中定义下标运算符
[i] 返回数组的2*i元素,但我也想让用户设置元素,所以
[i] =n,必须同时应用于2*i和2*i+1。
是否可以只向用户显示下标运算符?
0,0,1,1,2,2,5,5,7,7,2,2
[3] = 4;
0,0,1,1,2,2,4,4,7,7,2,2
另一个变通办法?并且通常它可以不仅仅是两个元件。
间接地,是的。
您可以返回一个带有下标运算符的专用类型,该运算符的工作原理基本上类似于函子,并负责根据您的规范分配值:
struct AssignFunctor {
MyArrayType& parent;
size_t index;
AssignFunctor(MyArrayType& parent, size_t index) : parent(parent), index(index) {}
AssignFunctor& operator=(int k) {
parent.set(index,k);
parent.set(index*2,k);
}
operator int() const {
return parent.get(index);
}
};
struct MyArrayType {
AssignFunctor operator[](size_t index) {
return AssignFunctor(*this,index);
}
int operator[](size_t index) const {
return get(index);
}
void set(size_t,int);
int get(size_t) const;
};
我确信您可以如上所述实现它。但运营商超载有一条基本规则。不要更改操作员的含义
从用户的角度来看,您正在设置一个元素,但它也应用于另一个元素。最好提供有意义的功能或更改数据结构的设计。
相关文章:
- 如何在C++程序中使用下标数字?
- 在继承的模板类中使用下标 [] 运算符
- STD :: MAP-使用下标操作员与插入方法添加元素
- 使用带有下标运算符的赋值运算符将值分配给 std::map
- C++:,当我使用字符串数组时,它的字符串下标超出了范围
- 将类实例作为指针传递,并在此指针上使用过载的下标运算符
- 如何在提升 lambda 中使用下标运算符
- 如何使用下标访问从函数作为指针返回的数组
- 如何使用下标运算符中指定的值做一些事情
- 如何通过指针简化重载下标运算符的使用
- 将 boost::shared_ptr 与重载下标运算符 ([]) 的类一起使用
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 使用矢量的数组下标'int[int]'无效类型
- 使用 c++,为什么我知道它不是时会收到错误消息“字符串下标超出范围”?或者至少看起来是这样
- 使用下标运算符进行Integer Vector元素比较失败,但使用at函数成功
- 使用向量和指针的双下标重载的区别
- 使用重载的下标运算符赋值
- 使用类模板初始化下标重载函数中的引用类型无效
- 重载c++下标[]操作符,可以使用长int索引
- 使用下标重载的单链表排序