我有两个简单的容器:一个存储指针,另一个存储指针的flat_set。为了能够在它们(或stl算法)上使用(auto ...),我想在它们中添加begin / end。对于具有flat_set的那个,我只需要返回flat_set的迭代器,但是如何才能对只容纳指针的容器做同样的事情呢?
我想避免为此创建一个完整的迭代器类...基本上,我想做类似的事情:
class Container
{
...
Iterator begin() { return the_pointer; }
Iterator end() { return the_pointer+1; }
private:
int* the_pointer;
}
但我不知道Iterator必须有哪个签名。
谢谢!
答案 0 :(得分:3)
指向对象类型的指针是有效的迭代器类型,因此您只需返回指针即可。实际上std::array<T,N>
有T*
作为迭代器类型。
答案 1 :(得分:1)
如果你的容器包含指针序列(它们像普通数组一样存储在内存中),那么你只需从类中返回指针
int * begin();
int * end();
这是因为(...:...)语法扩展为:
for ( auto begin = container.begin(), end = container.end();
begin != end; ++begin )
// ...
答案 2 :(得分:1)
C指针是合法的迭代器。 Here你可以通过一个关于如何从指针实现迭代器的部分来检查它们的有用指南。基本上,您需要实现begin()
和end()
返回第一个和最后有效指针。