我工作的一个实在太差了设计项目,我已经在这个数据结构跌跌撞撞:如何创建特定的std :: vector迭代器?
class OldBagOfData
{
public:
std::vector< BaseClass* > baseDatas;
std::vector< Derived1* > derived1Datas;
std::vector< Derived2* > derived2Datas;
std::vector< Derived3* > derived3Datas;
std::vector< Derived4* > derived4Datas;
}
更新的类的方法是使用一个可怕的很多的if/else条件语句(几十)并且成员是可修改的(最重要的是它使用指针而不是实例),尽管我们只是读取数据。
class CurrentBagOfData
{
private:
std::vector< BaseClass* > genericContainer;
Template< typename DataType>
std::vector< DataType* > getData(datatype IDtype);
public:
std::vector< BaseClass* > getbaseDatas(); /* = getData<Base>("base") */
std::vector< Derived1* > getDerived1Datas(); /* = getData<Derived1>("derived1") */
std::vector< Derived2* > getDerived2Datas(); /* = getData<Derived2>("derived2") */
std::vector< Derived3* > getDerived3Datas(); /* = getData<Derived3>("derived3") */
std::vector< Derived4* > getDerived4Datas(); /* = getData<Derived4>("derived4") */
}
然而,因为我只是读DATAS和排队新的输入,我想用迭代器:
// This loop is forbidden because obod.getDerived1Datas() is a temporary object
for(std::vector<Derived1*>::iterator it = obod.getDerived1Datas().begin();
it != obod.getDerived1Datas().end(); i++)
{
/* processing *it */
}
//What I want to do :
for(std::vector<Derived1*>::iteratorDerived1 it = obod.begin(); it != obod.end(); i++)
{
// it iterate over every Derived1 datas in the generic container
/* processing *it */
}
我已经通过使用通用的功能和模板简化了代码
如何创建std :: vector :: iteratorDerivedX?欢迎对我设计的任何其他建议。
为什么你不返回对get *函数中的向量的引用?尝试返回迭代器时会出现什么样的错误? – 2013-04-04 11:26:13
所以在你的“当前”中你有一个主向量,并且当你需要模板函数中的派生版本(是吗?)时复制它,并返回临时值。我可能会问的一件事是矢量(尽管重复)的损失是否会导致速度放慢 - 是否首先出现速度重复? – Caribou 2013-04-04 11:33:58
@ W.B:当直接使用迭代器时,我得到运行时错误“vector not derefenced”(或多或少)。 – lucasg 2013-04-04 11:48:53