我有一些技术问题,我在工作中重复了代码,我想摆脱它,所以我知道在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。您通常使用什么来避免重复代码?
答案 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”)。