Борьба с константным поведением при использовании векторов и итераторов - PullRequest
1 голос
/ 26 февраля 2012

У меня проблемы с использованием векторов, итераторов, а затем с использованием const.

Для некоторого контекста я пытаюсь создать метод записи для vector<string>, чтобы я мог легко напечататьвсе строки в векторе.

Вот фрагмент кода:

void ArrayStorage::write(ostream &sout) const{
    for (vector<string>::iterator stringIt = _dataVector.begin();
                    stringIt < _dataVector.end();
                    stringIt++){
        sout << *stringIt;
    }
}

ostream& operator<<(ostream &sout, const ArrayStorage &rhs){
    rhs.write(sout);
    return sout;
}

Когда я пытаюсь это сделать, я получаю сообщение об ошибке в строке 2:

не может преобразовать из 'std::_Vector_const_iterator<_Myvec>' в 'std::_Vector_iterator<_Myvec>'.

Поэтому мне нужно удалить const из конца метода записи, а затем для operator<<чтобы работать, я должен удалить const из параметра rhs.

Почему это?Я не пытаюсь изменить учеников, поэтому не понимаю, что происходит ... Что мне не хватает?

1 Ответ

6 голосов
/ 26 февраля 2012

Это как будто компилятор говорит тебе.Используйте

::const_iterator

вместо

::iterator

, чтобы

for (vector<string>::const_iterator stringIt = _dataVector.begin();
                stringIt != _dataVector.end();
                ++stringIt){
    sout << *stringIt;
}

работало.Обязательно используйте! = Вместо <при сравнении с end (). </p>

...