std::list<Foo>
을 포함하는 클래스가 있고 공용 메서드 begin()
및 end()
이 해당 목록의 반복자를 반환하는 경우 반복기를 사용하지 않고 std::list<Foo*>
에 반환하는 추가 메서드를 어떻게 구현할 수 있습니까?Foo 벡터에 반복자를 사용할 수 있습니까?
필자는 포인터의 병렬 컨테이너를 유지 관리하지 않으려합니다.
편집 :
은 내가 향상시키고 자하는 큰 코드베이스가 있습니다. 이 객체의 자식을 반환하는 메소드가 기본 클래스와 나무 같은 데이터 구조를 가지고
template <class T>
class FooCollection: public FooBase
{
public:
typedef typename std::list<T> ContainerType;
typedef typename ContainerType::iterator iterator;
typedef typename ContainerType::const_iterator const_iterator;
private:
ContainerType _items;
public:
// ...
const_iterator begin() const { return itemsM.begin(); };
const_iterator end() const { return itemsM.end(); };
iterator begin() { return itemsM.begin(); };
iterator end() { return itemsM.end(); };
virtual bool getChildren(std::vector<FooBase *>& children)
{
for (iterator it = itemsM.begin(); it != itemsM.end(); ++it)
children.push_back(&(*it));
return (itemsM.size() != 0);
};
// ...
};
: 자식 개체의 컬렉션을 구현하는 템플릿 클래스가 있습니다
class FooBase
{
// ...
virtual bool getChildren(std::vector<FooBase *>& children);
virtual size_t getChildrenCount() const { return 0; };
// ...
}
이 코드는 클래스가 다른 클래스 인 FooCollection<>
이 제공하는 반복기와 트리를 반복 할 때 FooBase::getChildren()
을 사용합니다. FooBase::getChildren()
이 반복자로 대체 될 수 있다고 생각했지만 어쩌면 틀렸어?
사용에 대한 그것'표준 : : 목록'또는'표준 : : 벡터 '얼마나. 당신의 제목은 한 가지, 질문은 다른 것을 말합니다. –
@ 에반 : 고마워, 내가 생각하기에 침대 시간. 컨테이너의 유형은 실제로 중요하지 않습니다. 동일한 컨테이너에 대해 두 가지 유형의 반복자를 모두 가질 수 있습니까? – mghie
왜 표준이 필요합니까 :: list :: iterator? can not 당신은 std :: list :: iterator를 캡슐화하고, dereferenced 될 때 Foo의 인스턴스의 주소를 제공하는 간단한 iterator를 작성할 수 없습니까? –