- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为一个适配器范围实现一个迭代器,它懒惰地评估原始范围上的某些东西。这意味着:取消引用迭代器应该取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果。
T operator*() const {
return someOperation(*original_iterator);
}
如何实现类似于此 operator*
的 operator->
?在查看其他迭代器的实现时,它们通常返回一个 T*
。但是我不能返回一个指针,因为“指向对象”是一个临时的、即时计算的。
在这种情况下,通常的指导是什么?我可以简单地返回一个 T
吗?
虽然我个人不需要这个运算符(我也可以使用 (*i).m
而不是 i->m
并且标准算法不需要似乎也依赖于 ->
),我希望我的迭代器严格符合 ForwardIterator
概念是InputIterator
的特化这需要实现此运算符。
最佳答案
最简单的方法是只使用 Boost.Iterators 来实现您的迭代器,它会处理棘手的代码。
但是 Boost.Iterators 使用的技术并没有那么复杂。它看起来像这样:
template <typename T>
class proxy_holder {
T t;
public:
proxy_holder(const T& t) : t(t) {}
T* operator ->() const { return &t; }
};
class the_iterator {
// ...
proxy_holder<my_proxy> operator ->() const {
return proxy_holder<my_proxy>(**this);
}
};
这依赖于箭头运算符被链接的事实,即如果一个箭头运算符返回不是原始指针的东西,箭头运算符将依次调用那个东西,直到你得到一个指针。
关于c++ - 使用即时计算的临时值为 ForwardIterator 实现成员访问运算符->,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495962/
我正在为一个适配器范围实现一个迭代器,它懒惰地评估原始范围上的某些东西。这意味着:取消引用迭代器应该取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果。 T operator*() cons
我只是在考虑我们是否可以加快提取出现在已排序 std::list 中的不同元素的速度通过运行 parallelized version的 std::unique_copy() . 我的想法是这样的:
我似乎找不到任何标准算法来证明默认构造 ForwardIterator 的要求。 是否有任何实际原因,或者我可以安全地忽略它? 最佳答案 对于标准算法和客户端用户来说,它是为了简化这些类型的迭代器的使
我正在寻找一个迭代器的例子,它满足被认为是 ForwardIterator 的有限品质,同时不是迭代器层次结构中的任何其他东西。 我编写了一个程序,它打印迭代器符合五个迭代器类别中的哪一个。我已经针对
我正在使用 boost::asio::async_read_until 从 TCP 套接字读取 \n 结束的行。让我记忆一下 async_read_until 签名如下: http://www.boo
假设我有一个容器,我需要逐一移动它的元素。如果我知道我只需要在迭代器上使用 ++ 运算符,我应该使用 ForwardIterator,但是如果我使用 在性能方面会有什么损失code>Bidirecti
C++ 标准库的 max_element 算法要求将迭代器作为输入传递给模型 ForwardIterator。 我的理解是 ForwardIterator 通过指定您可以使用 ForwardItera
我很惊讶它如何在使用不支持 auto middle = first + (last - first)/2; 的 ForwardIterator 时计算 middle。 最佳答案 当然,即使它不是随机迭
(此问题与 Why does std::max_element require a ForwardIterator? 具有相同的“问题模板”,但答案必须不同,因为 std::fill 不会将迭代器返回
我是一名优秀的程序员,十分优秀!