set的iterator只能是const的?
首先,我自己实现了一个智能指针系统。
然后,为了存储一系列的对象,我把智能指针存在标准库的set里:
- C/C++ code
typedef SmartPointer<Object> ObjectPtr;class Foo {public: std::set<ObjectPtr> objects;}
然后问题就来了。当我想要遍历这些对象进行某种操作的时候:
- C/C++ code
for (std::set<ObjectPtr>::iterator it = objects.begin(); it != objects.end(); it++) { ObjectPtr& curr = *it; curr->some_method();}
发现iterator是const的。而且看set的文档,set键的iterator就强制是const的。
那么,我应当拿什么做容器?
[解决办法]
vector,list,stack多了去了。
[解决办法]
const ObjectPtr &curr = *it;
curr->some_method();
some_method声明为const,需要操作的成员声明为mutable。
[解决办法]
The value of an element in a set may not be changed directly. Instead, you must delete old values and insert elements with new values.