как назначить итератор set <> указателю c ++ - PullRequest
0 голосов
/ 04 марта 2020

Мне нужно назначить итератор set <> указателю, в то время как я передаю set в качестве аргумента void ProcessVessel(ContainerTerminal* containerTerminal, set<ArrivedVessel> * arrivedVesselPool), тогда как ArrivedVessel - это класс, и после этого я сделал итератор std::set<ArrivedVessel>::iterator it; для l oop, а для l oop for (it = arrivedVesselPool->begin(); it != arrivedVesselPool->end(); it++), до сих пор компилятор не показывал мне никакой ошибки, но когда я присваиваю it указателю, который Vessel* currentVessel подобен этому currentVessel = &(*it);, компилятор выдает ошибку

A значение типа 'const ArrivedVessel *' нельзя присвоить объекту типа 'vessel *'.

Однако для преобразования итератора я нашел его по этой ссылке преобразование итератора в указатель но я не мог понять это прекрасно.

Вот фрагмент исходного кода

void ProcessVessel(set<ArrivedVessel> * arrivedVesselPool) {
        std::set<ArrivedVessel>::iterator it;
        for (it = arrivedVesselPool->begin(); it != arrivedVesselPool->end(); it++)
        {
            Vessel* currentVessel;
            currentVessel = &(*it);}

Любые предложения будут очень полезны. Заранее спасибо.

1 Ответ

4 голосов
/ 04 марта 2020

std::set не позволяет вам изменять объекты, хранящиеся в нем, поэтому его итераторы возвращают const ссылки. Поэтому вы можете назначить только указатель const:

void ProcessVessel(set<ArrivedVessel> * arrivedVesselPool) {
    std::set<ArrivedVessel>::iterator it;
    for (it = arrivedVesselPool->begin(); it != arrivedVesselPool->end(); it++)
    {
        const ArrivedVessel* currentVessel;
        currentVessel = &(*it);
    }

Если вы хотите изменить элементы, вам нужно использовать другой контейнер. Например, вы можете использовать std::vector, вам нужно убедиться, что элементы уникальны сами. Вам также необходимо убедиться, что элементы остаются уникальными после их изменения.

...