我检查过RDcode的代码。我遇到了一个定义的函数,我不明白。你能帮我解决一下这段代码吗?
template <typename T>
class argless {
public:
argless(const T& c) : container(c) {}; // i dont understant this line.
bool operator() (unsigned int v1,unsigned int v2){
return container[v1]<container[v2];
}
const T &container;
};
答案 0 :(得分:8)
它是一个构造函数,它引用const T
,并用它初始化成员变量container
。
答案 1 :(得分:3)
它使用初始化程序语法将const引用传入的容器存储在成员变量容器中。它必须使用初始化器语法,因为容器成员变量是一个引用(它必须通过初始化列表初始化)。
答案 2 :(得分:3)
答案 3 :(得分:0)
这是一个仿函数的类模板,允许比较可索引容器中的任意元素,即。一个实现memberOfT& operator[] (unsigned int)
的人。
此外,memberOfT
必须支持bool operator<(const memberOfT&, const memberOfT&)
,否则使其成为仿函数的operator()
将无法编译。
您询问的行只是使类T
的输入容器可供该类的其他成员使用。由于这是作为参考保存在argless
中,因此argless
的构造函数上使用的源容器在argless
的使用期限内保持在范围内非常重要。
答案 4 :(得分:0)
这是两种类型的语法:
1)初始化一个const变量。
2)调用构造函数的基类。
答案 5 :(得分:0)
它用于使operator()像operator&lt;对于另一个容器的组件。您可以使用它根据另一个容器的内容对一个容器进行排序,其中第一个包含第二个容器的索引。在这种情况下,您将获得有关排序容器的外观的知识,而无需实际排序 - 如果移动元素是昂贵或不可能的,例如字符串,这将是一件有用的事情。