【发布时间】:2014-02-03 22:14:54
【问题描述】:
我对引用、STL 容器和对象的工作方式存在误解。
我以前在 STL 容器中寻找使用引用,但似乎 STL 容器是“存储对象的对象”。但是如果我想在容器中存储对象并修改它们,我该怎么做呢?
我粘贴了一小段代码来说明我的问题。
class MyObject {
public :
int value;
MyObject(const MyObject& right) : value(right.value) {}
MyObject(int _value) : value(_value) {}
bool operator< (const MyObject& right) const {
return value < right.value;
}
void display() const {
cout << "(" << value << ") ";
}
};
在主要部分
cout << "Creating ... " << endl;
set<MyObject> oset;
for (int i = 0 ; i < 10 ; i++) {
MyObject o(rand() % 1000);
oset.insert(o);
}
cout << endl;
cout << "Display before ... " << endl;
for (MyObject o : oset) o.display();
cout << endl;
cout << "Incrementing ... " << endl;
for (MyObject o : oset) o.value += 1000;
cout << "Display after ... " << endl;
for (MyObject o : oset) o.display();
cout << endl;
由于容器不使用引用,增量应用于副本而不是对象。
我尝试在循环中使用“&”,即
for (MyObject& o : oset) o.value += 1000;
但我有以下错误:
错误:从“const MyObject”类型的表达式中对“MyObject&”类型的引用进行无效初始化
【问题讨论】: