gpt4 book ai didi

c++ - c++自制列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:49 24 4
gpt4 key购买 nike

list.h

class Link {
public:
string value;
Link(const string& v, Link* p = 0, Link * s = 0):
value(v), prev(p), succ(s) {}
Link* insert(Link* n); // insert n before this object
Link* add(Link* n); // insert n after this object
Link* erase(); // remove this object from list
Link* find(const string& s); // find s in list
Link* const find(const string& s) const;
Link* advance(int n) ; // get the nth successor

Link* next() const { return succ; }
Link* previous() const { return prev; }

private:
Link* prev;
Link* succ;
};

你能告诉我为什么我们需要两个版本的 find()

Link* find(const string& s);        // find s in list
Link* const find(const string& s) const;

在这个自制的双链表中,这两个版本之间的主要区别应该是什么?

最佳答案

您需要同一成员函数的 const 和非 const 版本的原因是您可以在 const 上调用它们和非 const 对象:

Link link = ...;
link.find("hello"); // calls non-const find(), returns Link*

const Link clink = ...;
clink.find("goodbye"); // calls find() const

不过,您的 const 版本返回 Link* const。这是指向 Linkconst 指针。返回一个 const Link*,一个指向 const Link 的指针会更有意义:

Link* find(const std::string& );
const Link* find(const std::string& ) const;

这样,您的 const Link 仍然可以找到条目 - 只是不能修改它们。这将保持 const-ness。只要您不修改它们,就能够在 const 集合中查找内容是有意义的。

关于c++ - c++自制列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com