-2

我正在尝试使用来自 stl lib 的地图制作一个容器类,但我对const_iterator.

在我的课堂ConjuntoPreguntas上如何欣赏,我尝试使用不同的格式begin()end()方法,但我没有找到正确的方法。

在我的主课中,我尝试使用imprimir函数,即接收const ConjuntoPreguntas,但存在问题。所以我需要使用const ConjuntoPreguntas&.

void imprimir( const ConjuntoPreguntas& cp ){
    ConjuntoPreguntas::const_iterator it= cp.cbegin();


};

int main(){
     ConjuntoPreguntas CP;

    ifstream fin("PreguntasConstitucion.txt"); 

    fin >> CP;

    imprimir(CP);


}
class ConjuntoPreguntas{

    private:
        map<int,Pregunta> preguntas;

    public:
            class const_iterator; /
            class iterator{
             private:
              map<int,Pregunta>::const_iterator it;


           public:
               iterator & operator++(){
                ++it;
               }

               iterator & operator--(){
               --it;
               }

               pair<const int,Pregunta> &operator *(){
              return *it;
               }

               bool operator ==(const iterator &i){
              return i.it==it;
               }      

               bool operator !=(const iterator &i){
              return i.it!=it;
               }

               friend class ConjuntoPreguntas;
                 friend class const_iterator;
            };

            /**
             * @brief clase para iterar sobre la guia
             **/
            class const_iterator{
             private:
              map<int,Pregunta>::iterator it;
             public:

               const_iterator & operator++(){
                ++it;
               }

               const_iterator & operator--(){
               --it;
               }

               const pair<const int,Pregunta> &operator *(){
              return *it;
               }

               bool operator ==(const const_iterator &i){
              return i.it==it;
               }      

               bool operator !=(const const_iterator &i){
              return i.it!=it;
               }


               friend class ConjuntoPreguntas;

            };

            /**
             * @brief Inicializa un iterator al comienzo de la guia
             * */
           **iterator begin(){
                iterator i;
                i.it=preguntas.begin();
                return i;
            }

            const_iterator cbegin()const{
                const_iterator i ; 
                i.it = preguntas.begin();
                return i ;
            }
            /**
            const_iterator cbegin(){
                const_iterator i ; 
                i.it = preguntas.begin();
                return i ;
            }
            */
            /**
             * @brief Inicializa un iterator al final de la guia
             * */
           iterator end(){
                iterator i;
                i.it=preguntas.end();
                return i;
            } 

            const_iterator cend()const{
                const_iterator i;
                i.it= preguntas.end();
                return i;
            }
            /* const_iterator cend(){
                const_iterator i;
                i.it= preguntas.end();
                return i;
            }
             */**


};
4

1 回答 1

1

你的 cbegin 和 cend 应该是 const:

const_iterator cbegin() const {
//                      ^^^^^
    const_iterator i ; 
    i.it = preguntas.begin();
    return i ;
}

const_iterator cend() const {
//                    ^^^^^
    const_iterator i;
    i.it= preguntas.end();
    return i;
}

也就是说,您可以从映射中导入它们,而不是定义迭代器和 const_iterator:

class ConjuntoPreguntas {
private:
    map<int,Pregunta> preguntas;

public:
    using const_iterator = map<int,Pregunta>::const_iterator;
    using iterator = map<int,Pregunta>::iterator;
于 2015-12-08T11:07:00.450 回答