基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象
range based for loop for custom linked list containing pointers in C++, only returns objects
我们编写了一个自定义容器类,应该能够支持基于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*&
。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错