我正在尝试算法支持静态对象列表。我尝试过多种方式来实现这一点,但唯一能让它起作用的方法是编写一个传统的 C for 循环。
例子:
class ListNode
{
public:
ListNode(int id);
virtual ~ListNode() {}
// Container support functions
ListNode* operator++() {return m_nextNode;}
static ListNode* findNode(int p_id);
static ListNode* m_nodeList{nullptr};
private:
int m_id;
ListNode *m_nextNode;
protected:
static void addNewNode(ListNode* p_node);
friend ListNode* begin(void);
};
inline ListNode* begin(void) {return ListNode::m_nodeList;}
inline ListNode* end(void) {return nullptr;}
// Declare the list head
ListNode* ListNode::m_nodeList = nullptr;
// Constructor
ListNode::ListNode (int id): m_id{id}
{
ListNode::addNewNode(this);
}
// Add node to front of list
void ListNode::addNewNode(ListNode* p_node)
{
p_node->m_nextService = m_nodeList;
m_nodeList = p_node;
}
//
// The following are all the find implementation attempts
//
ListNode* ListNode::failedFind1(int id) {
return std::find_if(ListNode::m_nodeList,
static_cast<ListNode*>(nullptr),
[p_serviceNumber](const ListNode& s) {
return id==s.m_id;
}
);
我还使用定义的 begin()
和 end()
函数进行了尝试。唯一有效的是以下内容:
for (auto *s = m_nodeList; s != nullptr; s = s->m_nextNode)
{
if (s->m_id == id)
return s;
}
return nullptr;
我错过了什么?
最佳答案
感谢您的反馈。
我为安全关键型应用程序开发软件。通常不允许使用动态内存。 STL链表类是一个独立的数据结构,用来维护一个对象列表。我们有对象,只需要它们作为 STL 兼容的容器对象。 (这就是为什么)
这link非常有用。问题是增量运算符的错误定义。
关于c++ - 如何将 find_if 与链表等非容器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52560766/