C++ 如何为我在C+中创建的对象构建迭代器+;
例如,我想在“myVector”类中构建一个简单的迭代器: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类型的对象。现在我想用操作符++构建迭代器,在向量的私有数组上运行 非常
#包括
使用名称空间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迭代器,最简单的方法就是