使用重载[]
运算符,我们可以在容器内设置元素的值。 E.g
class Example{
public:
Example(){
arr = new int[10];
}
int operator [] ( unsigned int i) const{
return arr[i];
}
int & operator [] ( unsigned int i){
return arr[i];
}
private:
int *arr[];
}
所以使用
Example a;
a[0] = 0;
a[1] = 1;
a[2] = 2;
我们可以设置元素的值。是否有可能用struct做这样的事情?如果我们没有int数组但结构的向量。 e.g
struct Test{
int value;
int index;
Test( int a , int b){
value = a;
index = b;
}
}
class Example{
public:
Example(){
}
int operator [] ( unsigned int i) const{
return a[i].value;
}
Test & operator [] ( unsigned int i){
Test a(0, i );
one.push_back(a);
return a -> value;
}
private:
vector<Test> a;
}
Example a;
a[0] = 0;
a[1] = 1;
a[2] = 2;
如何使用典型的int容器更改/设置值的方式更改返回结构的value属性?
答案 0 :(得分:0)
是的,这是可能的。
代码有错误:return a -> value;
返回一个int,而函数operator[](unsigned int i)
表示它将返回对Test
的引用。您可以改为one[one.length()-1]
,以便example[0]->value = 1;
,example
类型为Example
?
语句example[0]
是对operator[](unsigned int i)
的调用,它会返回对one[0]
的引用,Test
的类型是对operator[]
的引用。
定义int& getValue(unsigned int);
以返回int是完全有效的,并按照上面的方式实现它。但这非常不直观;我当然会发现它非常混乱,因为operator []通常返回容器的元素,而不是容器元素的字段。最好为其定义一个具有不言自明名称的单独函数,例如value
字段为int& getIndex(unsigned int)
,index
字段为slc loopback:acl
。
答案 1 :(得分:0)
#include <vector>
using namespace std;
struct Test {
int value;
int index;
Test(int a, int b) {
value = a;
index = b;
}
};
class Example {
public:
Example() {}
int operator [] (unsigned int i) const {
return _a[i].value;
}
int & operator [] (unsigned int i) {
Test a(0, i);
_a.push_back(a);
return _a[i].value;
}
private:
vector<Test> _a;
};
int main() {
Example a;
a[0] = 0;
a[1] = 1;
a[2] = 2;
return 0;
}