繁体   English   中英

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

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

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

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

    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循环不是指针的范围内? 或者更好的为什么这不起作用:

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-declaration需要是引用类型或实际值类型。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM