Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从指针返回迭代器_C++_Pointers_Iterator - Fatal编程技术网

C++ 从指针返回迭代器

C++ 从指针返回迭代器,c++,pointers,iterator,C++,Pointers,Iterator,我有两个简单的容器:一个存储指针,另一个存储一组指针。为了能够在这两种算法(或stl算法)上使用for(auto…),我想为它们添加begin/end。对于具有flat_集的容器,我只需要返回flat_集的迭代器,但是如何对只包含指针的容器执行相同的操作 我想避免仅仅为了这个而创建一个完整的迭代器类。。。基本上,我想这样做: class Container { ... Iterator begin() { return the_pointer; } Iterator en

我有两个简单的容器:一个存储指针,另一个存储一组指针。为了能够在这两种算法(或stl算法)上使用for(auto…),我想为它们添加begin/end。对于具有flat_集的容器,我只需要返回flat_集的迭代器,但是如何对只包含指针的容器执行相同的操作

我想避免仅仅为了这个而创建一个完整的迭代器类。。。基本上,我想这样做:

class Container
{
    ...
    Iterator begin() { return the_pointer; }
    Iterator end() { return the_pointer+1; }
    private:
    int* the_pointer;
}
但我不知道迭代器必须具有哪个签名


谢谢

指向对象类型的指针是有效的迭代器类型,因此您可以只返回一个指针。实际上,
std::array
T*
作为其迭代器类型。

指向对象类型的指针是有效的迭代器类型,因此您可以只返回一个指针。实际上,
std::array
的迭代器类型是
T*

如果容器包含指针序列(它们像普通数组一样存储在内存中),那么您只需从类返回指针即可

int * begin();
int * end();
这是因为for(…:…)语法扩展为如下内容:

for ( auto begin = container.begin(), end = container.end();
      begin != end; ++begin )
 // ...

若您的容器包含指针序列(它们像普通数组一样存储在内存中),那个么您可以简单地从类返回指针

int * begin();
int * end();
这是因为for(…:…)语法扩展为如下内容:

for ( auto begin = container.begin(), end = container.end();
      begin != end; ++begin )
 // ...

C指针是合法的迭代器。您可以查看一个关于如何从指针实现迭代器的有用指南。基本上,您需要实现
begin()
end()
返回第一个和最后一个有效指针。

C指针是合法的迭代器。您可以查看一个关于如何从指针实现迭代器的有用指南。基本上,您需要实现
begin()
end()
返回第一个和最后一个有效指针。

但我不知道迭代器必须具有哪个签名。这是什么意思?只需包含
typedefint*迭代器;typedef const int*常量迭代器并返回指针。但我不知道迭代器必须具有哪个签名。这是什么意思?只需包含
typedefint*迭代器;typedef const int*常量迭代器并返回指针。好的,但是当我这样做时,为什么我得到的是int而不是int*?我的意思是我必须为(int&I:container)而不是为(int*I:container)编写代码。@user52730:如果你想迭代指针,而不是它们指向的值,你需要将
begin()
end()
函数定义为:
int**begin()
int**end()
。啊,是的,差不多了:)它对begin有效,但是如何结束,因为这是非法的:int**end(){return&(the_pointer+1)}?为了确定,我为begin做了这件事:int**begin(){return&the_pointer;},可以吗?@user52730:如果你想一次只存储一个指针,你不应该实现
begin()
/
end()
方法,因为它没有意义。您应该创建一些类似get方法的东西(如果您想访问它),或者使用。好的,但是当我这样做时,为什么我得到的是int而不是int*?我的意思是我必须为(int&I:container)而不是为(int*I:container)编写代码。@user52730:如果你想迭代指针,而不是它们指向的值,你需要将
begin()
end()
函数定义为:
int**begin()
int**end()
。啊,是的,差不多了:)它对begin有效,但是如何结束,因为这是非法的:int**end(){return&(the_pointer+1)}?为了确定,我为begin做了这件事:int**begin(){return&the_pointer;},可以吗?@user52730:如果你想一次只存储一个指针,你不应该实现
begin()
/
end()
方法,因为它没有意义。您应该制作一些类似get方法的东西(如果您想访问它),或者使用。谢谢您的指导!只是为了澄清,
end()
实际上应该在最后一个有效指针之后返回指针。感谢您的指导!只是为了澄清,
end()
实际上应该在最后一个有效指针之后返回指针。