C++ 如何为我在C+中创建的对象构建迭代器+;

C++ 如何为我在C+中创建的对象构建迭代器+;,c++,object,iterator,C++,Object,Iterator,例如,我想在“myVector”类中构建一个简单的迭代器: #包括 使用名称空间std; #定义最大尺寸10 类myVector{ 私人: int*arr; int sp; 公众: myVector(){ arr=新整数[maxSize]; sp=0; } 布尔加法(整数){ if(sp==maxSize)返回0; arr[sp]=num; sp++; 返回1; } }; 在示例中,我构建了一个类,该类生成myVector类型的对象。现在我想用操作符++构建迭代器,在向量的私有数组上运行 非常

例如,我想在“myVector”类中构建一个简单的迭代器:

#包括
使用名称空间std;
#定义最大尺寸10
类myVector{
私人:
int*arr;
int sp;
公众:
myVector(){
arr=新整数[maxSize];
sp=0;
}
布尔加法(整数){
if(sp==maxSize)返回0;
arr[sp]=num;
sp++;
返回1;
}
};
在示例中,我构建了一个类,该类生成myVector类型的对象。现在我想用操作符++构建迭代器,在向量的私有数组上运行


非常感谢

您必须支持
std::iterator\u traits
。简单的方法是使用适当的参数从
std::iterator
继承

在这样做时,您必须确定迭代器类别。这决定了您保证支持的内容,包括操作员方面和行为方面

现在,
boost
有了一些帮助器类型,使得编写迭代器稍微容易一些。考虑使用<代码> Boost 。但是,没有基本迭代器,编写基本迭代器并非不可能

在上面的特定情况下,指针是解决问题的有效迭代器。而且比上述任何一个选项都简单。将此作为您的第一次迭代:亲吻。请注意,指针具有免费的
std::iterator_traits
支持

要使对象可移植(并支持(auto&&x:c)语法),请在与生成迭代器的类相同的命名空间中编写一个免费的
begin
end
函数,或者添加执行相同操作的
begin()
end()
方法。我还倾向于添加
size
empty
front
back
,因为我发现它们很有用。例如:

T& back(){return *std::prev(end());}
T const& back()const{return *std::prev(end());}

您必须支持
std::iterator\u traits
。简单的方法是使用适当的参数从
std::iterator
继承

在这样做时,您必须确定迭代器类别。这决定了您保证支持的内容,包括操作员方面和行为方面

现在,
boost
有了一些帮助器类型,使得编写迭代器稍微容易一些。考虑使用<代码> Boost 。但是,没有基本迭代器,编写基本迭代器并非不可能

在上面的特定情况下,指针是解决问题的有效迭代器。而且比上述任何一个选项都简单。将此作为您的第一次迭代:亲吻。请注意,指针具有免费的
std::iterator_traits
支持

要使对象可移植(并支持(auto&&x:c)语法),请在与生成迭代器的类相同的命名空间中编写一个免费的
begin
end
函数,或者添加执行相同操作的
begin()
end()
方法。我还倾向于添加
size
empty
front
back
,因为我发现它们很有用。例如:

T& back(){return *std::prev(end());}
T const& back()const{return *std::prev(end());}

您必须支持
std::iterator\u traits
。简单的方法是使用适当的参数从
std::iterator
继承

在这样做时,您必须确定迭代器类别。这决定了您保证支持的内容,包括操作员方面和行为方面

现在,
boost
有了一些帮助器类型,使得编写迭代器稍微容易一些。考虑使用<代码> Boost 。但是,没有基本迭代器,编写基本迭代器并非不可能

在上面的特定情况下,指针是解决问题的有效迭代器。而且比上述任何一个选项都简单。将此作为您的第一次迭代:亲吻。请注意,指针具有免费的
std::iterator_traits
支持

要使对象可移植(并支持(auto&&x:c)语法),请在与生成迭代器的类相同的命名空间中编写一个免费的
begin
end
函数,或者添加执行相同操作的
begin()
end()
方法。我还倾向于添加
size
empty
front
back
,因为我发现它们很有用。例如:

T& back(){return *std::prev(end());}
T const& back()const{return *std::prev(end());}

您必须支持
std::iterator\u traits
。简单的方法是使用适当的参数从
std::iterator
继承

在这样做时,您必须确定迭代器类别。这决定了您保证支持的内容,包括操作员方面和行为方面

现在,
boost
有了一些帮助器类型,使得编写迭代器稍微容易一些。考虑使用<代码> Boost 。但是,没有基本迭代器,编写基本迭代器并非不可能

在上面的特定情况下,指针是解决问题的有效迭代器。而且比上述任何一个选项都简单。将此作为您的第一次迭代:亲吻。请注意,指针具有免费的
std::iterator_traits
支持

要使对象可移植(并支持(auto&&x:c)语法),请在与生成迭代器的类相同的命名空间中编写一个免费的
begin
end
函数,或者添加执行相同操作的
begin()
end()
方法。我还倾向于添加
size
empty
front
back
,因为我发现它们很有用。例如:

T& back(){return *std::prev(end());}
T const& back()const{return *std::prev(end());}

你需要写这样的东西

class myVector {
  class myIterator {
    private:
        int *position; //operator ++ increment this position
    public:
        myIterator operator++(){ 
           //increment position here 
        }
        int& operator*(){ 
          //return *pos 
        }
        bool operator==(const myIterator &it)const {
           //check that pos and it.pos are the same
        }
   };
};

这将起作用,但不会是一个符合STL的迭代器,因为您还需要添加几个typedef,比如说迭代器的类型(在您的例子中,您有一个输入迭代器)。如果你想要一个STL迭代器,最简单的方法就是使用。

你需要这样写

class myVector {
  class myIterator {
    private:
        int *position; //operator ++ increment this position
    public:
        myIterator operator++(){ 
           //increment position here 
        }
        int& operator*(){ 
          //return *pos 
        }
        bool operator==(const myIterator &it)const {
           //check that pos and it.pos are the same
        }
   };
};
这将起作用,但不会是一个符合STL的迭代器,因为您还需要添加几个typedef,比如说迭代器的类型(在您的例子中,您有一个输入迭代器)。如果你想要一个STL迭代器,最简单的方法就是