我有一组课程。每个类都继承自另一个类。关系如下。 (我只是发布了一个类继承自另一个类的方式,只是为了让所有人都知道)
class LineNumberList : public MyVector <LineNumber > //top class
class MyVector : public std::vector <Type>
class LineNumber : public ElementNumber
class ElementNumber { //this is the base class
protected:
int number;
public:
ElementNumber(int p){number=p;}
// some more codes //
}
现在,我想实现一个可用于我的顶级类find
元素的函数,即LineNumberList
。我尝试使用标准find
函数,但它不起作用。任何人都可以帮我实现类似的查找功能,非常感谢。
答案 0 :(得分:3)
“我尝试使用标准查找功能,但它不起作用。”适合我:
#include <vector>
#include <iostream>
#include <algorithm>
class ElementNumber {
protected:
int number;
public:
ElementNumber(int p) :number(p) {}
bool operator==(const ElementNumber&e) { return number == e.number; }
};
class LineNumber : public ElementNumber {
public:
LineNumber(int p) : ElementNumber(p) {}
};
template <class Type>
class MyVector : public std::vector<Type> {
};
class LineNumberList : public MyVector<LineNumber> {
};
// EDIT: add local implementation of std::find
template<class InputIterator, class T>
InputIterator myfind ( InputIterator first, InputIterator last, const T& value )
{
http://www.cplusplus.com/reference/algorithm/find/
for ( ;first!=last; first++) if ( *first==value ) break;
return first;
}
int main() {
LineNumberList ll;
LineNumber l(7);
ll.push_back(l);
std::cout << std::boolalpha << !(std::find(ll.begin(), ll.end(), l) == ll.end()) << "\n";
std::cout << std::boolalpha << !(::myfind(ll.begin(), ll.end(), l) == ll.end()) << "\n";
}