我正在学习C++,但是无法理解这个问题:
我有一个简单的A类。
然后我有一个常规的
遍历以获取所有值并不是问题,但我想在这次迭代中修改值:
我认为这应该是可行的,就像您在Java中在foreach循环中所做的那样。编译时出现错误:
查看STL set的源代码,我发现
这是用循环改变一堆
我有一个简单的A类。
class A {
private:
int ival;
float fval;
public:
A(int i = 0, float f = 0.0) : ival(i), fval(f) { }
~A(){ }
void show() const {
cout << ival << " : " << fval << "\n";
}
void setVal(int i) {
ival = i;
}
//const getters for both ival and fval
//used for the default "lesser"
friend bool operator<(const A& val1, const A& val2) {
return val1.ival < val2.ival ? true : false;;
}
}
然后我有一个常规的
set<A> myset
,在循环中使用 insert(A(2, 2.2));
填充。遍历以获取所有值并不是问题,但我想在这次迭代中修改值:
for(set<A>::iterator iter = set3.begin(); iter != set3.end(); iter++) {
iter->setVal(1);
}
我认为这应该是可行的,就像您在Java中在foreach循环中所做的那样。编译时出现错误:
error: passing ‘const A’ as ‘this’ argument of ‘void A::setVal(int)’ discards qualifiers
。查看STL set的源代码,我发现
begin()
仅作为const方法可用,我认为这可能是问题所在。尝试在setVal()
方法上使用const会得到相同的错误,并且没有多大意义,因为我想修改A
的值。这是用循环改变一堆
A
值的错误方法吗?
val1.ival < val2.ival ? true : false
与val1.ival < val2.ival
是相同的。 - Pedro d'Aquino