读书人

set的iterator只能是const的?解决方案

发布时间: 2012-05-14 15:24:34 作者: rapoo

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.

读书人网 >C++

热点推荐