Проблема C++ при удалении элемента из вектора указателейC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема C++ при удалении элемента из вектора указателей

Сообщение Anonymous »

Я постараюсь изложить это как можно проще. Примечание. Я часами искал здесь ответы, а также каждую вики-страницу и несколько дней ломал голову над этим.
Проект представляет собой однострочный калькулятор, конкретной проблемной частью кода является:

Код: Выделить всё

for (int i = 0; i < operatorPositions.size(); i++)
{
if (toProcess.at(operatorPositions.at(i)) == "(" || toProcess.at(operatorPositions.at(i)) == ")")
{
int storedPosition = operatorPositions.at(i);

for (int j = i + 1; j < operatorPositions.size(); j++)
{
operatorPositions.at(j)--;
}

operatorOrder.erase(operatorOrder.begin() + i);
operatorPositions.erase(operatorPositions.begin() + i);

toProcess.erase(toProcess.begin() + storedPosition);
}
}
на данный момент операторыPositions иoperatorOrder совпадают. ОператорПозиции — это вектор целого числа, а операторОрдер — вектор указателя целого числа.
toProcess — это строковый вектор, который представляет собой входные данные, анализируемые между операторами и числами. будет выглядеть примерно так:
Ввод: 5*(5+5)
toProcess: 5,*,(,5,+,5, )
operatorPositions: 1,2,4,6
Чтобы скобки учитывались для более высокого приоритета в порядке операций, мне нужно удалить элемент из вектор целых чисел, имеющий позиции операторов и элемент вектора указателей на предыдущие элементы векторов.
Но при этом получается странно, что удаляются неправильные элементы или имеется больше или меньше элементов.
фрагмент кода можно найти в комментарии //снятие скобки.
Можно воспроизвести с помощью 5*(5+5)
(5+5 )*5 работает нормально
Я знаю, что это не лучший код, но Я пытаюсь учиться.
С тех пор я понял, как это лучше сделать, но я все еще хочу учиться и знать, что здесь не так.
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/792 ... f-pointers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»