基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象

range based for loop for custom linked list containing pointers in C++, only returns objects

本文关键字:指针 C++ 自定义 链表 对象 返回 包含 用于 范围 于范围 for      更新时间:2023-10-16

我们编写了一个自定义容器类,应该能够支持基于rang的for循环,请参阅此处:c ++ shell。运行该示例时,您可以看到它正在工作。

本质上,容器是指向元素的指针的链接列表

LinkedList ll;
ll.push_back(new Element(1));
ll.push_back(new Element(2));
ll.push_back(new Element(3));
for(LinkedList::iterator it = ll.begin(); it != ll.end(); ++it){
cout << it->some_value << endl;
}
for(Element ele : ll) {
cout << ele.some_value << endl;
}

将打印123123.我们不明白的是:为什么基于循环的范围中的ele不是指针?或者更好的是为什么这不起作用:

for(Element * ele : ll) {
cout << ele->some_value << endl;
}

基本上,我们希望使用自定义链表实现与 std 向量相同的目标:

vector<Element*> vec{new Element(1),new Element(2),new Element(3)};
for(Element * ele : vec)
{
cout<<ele->some_value<<endl;
}

该标准将 的 范围定义为等效于:

{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin )
{
for-range-declaration = *__begin;
statement
}
}

ele不应该是指针的原因是因为迭代器的取消引用(for-range-declaration = *__begin;),所以for-range声明需要是一个引用类型或实际值类型。

因此,您需要更改迭代器类,以便运算符*返回Element*Element*&