결과를 계산하는 임의의 수의 작업자 개체를 std::vector
으로 생성하는 클래스가 있습니다. 특정 지점에서 일부 작업자 개체를 제거 하겠지만 그 결과를 spawned
클래스에만 알려진 특정 순서로 유지하고 싶습니다. 따라서 클래스 A의 출력 벡터를 제공하고 있습니다.반복자 대 참조 포인터 대
나는 (IMO) 세 가지 옵션이 있습니다. 벡터, 참조 또는 반복자에 대한 포인터를 멤버로 가질 수있었습니다. iterator 옵션에는 특정 draw back이 있습니다 (iterator가 증가 될 수 있습니다.) 포인터 나 참조가 명확하면 확실하지 않습니다. NULL이 될 수 없으며 cruncher가 벡터가 있어야하기 때문에 참조가 더 좋습니다.
가장 확실하지 않은 것은 참조의 유효성입니다. std::list< std::vector<int> >
의 일부 작업으로 해당 광고가 무효화됩니까? 이러한 작업은 std::list
의 반복자를 무효화하는 것과 동일합니까? 지금 당장 볼 수없는 또 다른 접근법이 있습니까? 또한 컨테이너에 대한 결합은 옳지 않습니다. 특정 컨테이너를 Cruncher 클래스로 강제합니다. 명확성을 위해 제공
코드 : 반복자가 무효화
#include <list>
#include <vector>
#include <boost/ptr_container/ptr_list.hpp>
class Cruncher {
std::vector<int>* numPointer;
std::vector<int>& numRef;
std::list< std::vector<int> >::iterator numIterator;
public:
Cruncher(std::vector<int>*);
Cruncher(std::vector<int>&);
Cruncher(std::list< std::vector<int> >::iterator);
};
class A {
std::list< std::vector<int> > container;
boost::ptr_list< std::vector<int> > container2;
std::vector<Cruncher> cruncherList;
};
stord :: list를 사용하여 견본. 목록의 무효화를 설명하는 섹션으로 표준 인용문을 변경하면 답변이 정상입니다. – pmr
@pmr - 목록에 대한 추가 정보를 포함하도록 내 대답을 업데이트했습니다. –