new*_*ost 3 c++ containers for-loop range c++11
我们编写了一个自定义容器类,它应该能够支持基于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;
}
Run Code Online (Sandbox Code Playgroud)
将打印123123.我们不明白的是:为什么ele基于循环的范围不是指针?或者更好的为什么这不起作用:
for(Element * ele : ll) {
cout << ele->some_value << endl;
}
Run Code Online (Sandbox Code Playgroud)
基本上我们希望通过std向量实现自定义链表的相同:
vector<Element*> vec{new Element(1),new Element(2),new Element(3)};
for(Element * ele : vec)
{
cout<<ele->some_value<<endl;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
该标准定义了基于的范围,等同于:
{
auto && __range = range-init;
for ( auto __begin = begin-expr,
__end = end-expr;
__begin != __end;
++__begin )
{
for-range-declaration = *__begin;
statement
}
}
Run Code Online (Sandbox Code Playgroud)
原因ele不应该是指针是因为iterator(for-range-declaration = *__begin;)的取消引用,因此for-range-declaration需要是引用类型或实际值类型.
因此,您需要更改迭代器类,以便operator*返回Element*或Element*&.
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |