繁体   English   中英

如何避免重复代码?

[英]how to avoid repeating code?

我有一个技术问题,我在工作中重复了代码,我想摆脱它,所以我知道在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?
}

我是新手,我认为此功能非常不安全,请有人给我建议,如何改善我的代码,谢谢

PS:通常使用什么来避免重复代码?

我编辑了代码

您在这里所做的事情已经由std::find()函数完成,因此使用它会更好(尽管尝试练习自己实现这些功能当然可以)。

std::find()还演示了一种指示“未找到”条件的好方法-如果未找到该项目,它将返回迭代器的一端。 这样,调用者可以通过将返回的迭代器与Data.end()进行比较来确定是否找到了匹配项。

您发布的代码没有意义。 一方面,您将Data用作类型,另一方面,将Data用作对象。 假设它是一个对象,则指示未找到某些内容的方法将是返回指向其末端的迭代器。

return Data.end();

但是您的代码太混乱了,无法进行重大更改。

您不会通过在SO上发布问题来学习C ++-这根本无法完成。 相反,您需要阅读一本不错的C ++教科书-我建议您使用Accelerated C ++ ,该书详细介绍了迭代器之类的内容。 如果您进行这样的提问,那简直就是在浪费时间,更重要的是浪费我们的时间。

我真的不知道您在这里问什么,但是您的帖子中存在一些误解。

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

就像已经回答的另一个答案一样, std::find()完成了您似乎想做的事情。 它不一定必须是列表的成员才能工作,实际上,现代C ++样式指南通常更喜欢非成员函数。

现在到您的代码。 我非常确定您发布的代码无法正常工作的C ++代码,这使得您很难理解您要执行的操作。 您使用的列表类型也不是std::list<> (迭代器的工作方式不同),并且您将Data用作变量(在代码中未定义)和类型。

正如有人已经建议的那样,也许您应该更轻松一些,或者更好一点,为C ++初学者准备一本好书 (我推荐“ Accelerated C ++”和“使用C ++编程P&P”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM