如何避免重复代码?

时间:2010-06-18 09:27:23

标签: c++ inline-method

我有一些技术问题,我在工作中重复了代码,我想摆脱它,所以我知道在C ++中使用宏不是一个好主意,而是我必须使用内联函数,最好将此函数用作内联:

list<Data>::iterator foo(int data){
if(dataExists(data)){
    list<Data>::iterator i;
    for(i = dataClass.begin(); i != dataClass.end(); ++i){
       if(i->getData() == data){
        break;
       }
return i;   //here I have one more problem, what can I return if data doesn't exist?
}

我是初学者,我认为这个功能非常不安全,有人可以给我建议,我如何改进我的代码,提前谢谢

P.S。您通常使用什么来避免重复代码?

我编辑了代码

3 个答案:

答案 0 :(得分:8)

你在这里做的事情已经由std::find()函数完成了,所以最好使用它(尽管你自己尝试实现这些东西当然可以。)

std::find()还演示了指示“未找到”条件的好方法 - 如果找不到该项,则返回迭代器一个接一个的结尾。这样,调用者可以通过比较返回的Data.end()迭代器来确定是否找到了匹配项。

答案 1 :(得分:4)

您发布的代码毫无意义。在某一点上,您使用Data作为类型,而将另一个作为对象。假设它是一个对象,指示找不到某些东西的方法是返回指向其末尾的迭代器。

return Data.end();

但是你的代码太混乱了,无法在没有重大改变的情况下工作。

你不会通过在SO上发布问题来学习C ++ - 它根本无法完成。相反,你需要阅读一本好的C ++教科书 - 我推荐Accelerated C++,它详细介绍了迭代器之类的东西。如果你继续问这样的问题,你只是在浪费你的时间,更重要的是,浪费你的时间。

答案 2 :(得分:1)

我真的不知道你在这里问的是什么,但你的帖子中有几个误解。

第一个内联函数是一个您不需要关心的特定优化。首先了解正常功能并正确理解它们。

正如另一个答案所说,std::find()做了你似乎想做的事。它不一定是列表的成员,实际上现代C ++样式指针通常更喜欢非成员函数。

现在你的代码。我很确定你发布的代码不是C ++代码,这使得你很难理解你想要做什么。您使用的列表类型也不是std::list<>(迭代器的工作方式不同),并且您使用Data作为变量(在代码中未定义)和类型。

正如有人已经建议的那样,你应该开始更轻松一点,或者更好一点,为C ++初学者获得good book(我推荐“加速C ++”和“使用C ++编写P&amp; P”)。