Вернуть вектор из функции - PullRequest
1 голос
/ 23 июня 2011

У меня есть два класса, первый из которых содержит вектор и метод get, подобный этому:

std::vector<mytype> const& MyClassA::getvector(std::vector<mytype>::iterator &it)
{
    it = this->myiterator;

    return this->myvector;
}

std::vector<mytype> myvector;
std::vector<mytype>::iterator myiterator;

, и у меня есть другой класс, в котором я должен использовать вектор:

MyClassB::myfunction()
{
    std::vector<mytype>::iterator it;
    std::vector<mytype> vector = MyClassA->getvector(it);

    if (it > vector.begin())
    {
        ....
        (--it)->dosomestuff();
        ....
    }
}

в случае, если я получаю исключение времени выполнения: итераторы несовместимы.Почему?

РЕДАКТИРОВАТЬ 1

void MyClassA::setvector(mytype myelement)
{
    this->myvector.push_back(myelement);
    this->myiterator = this->myvector.end() - 1;
}

Ответы [ 2 ]

10 голосов
/ 23 июня 2011

Вы сделали копию вектора в вызывающем коде, и итератор недопустим, поскольку он все еще указывает на исходный вектор.

Вы, вероятно, намеревались что-то вроде этого:

const std::vector<mytype> & vector = MyClassA->getvector(it);
1 голос
/ 23 июня 2011

Поскольку вы возвращаете std::vector<mytype> _const_&, тип его итератора равен std::vector::const_iterator.

EDIT:

Ах да, я не прав, и Марк Рэнсом прав. Я оставляю этот ответ здесь из-за обсуждения в комментариях, которое само по себе может быть полезным для кого-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...