Cześć,
robiąc AoC, dzień 5. napotkałem się na spory problem przy wykonywaniu programu.
Po 3 minutach nie dał rady podać wyniku, nie ukrywam niecierpliwy jestem i chciałem zobaczyć czy działa więc włączyłem release i podało wynik od razu.

Z ciekawości policzyłem wyszło mi 106 mln iteracji.
Moje pytania brzmią:
Jak release zmienia debug mode, czemu jest aż taka różnica? (I nie chodzi mi o przykład, gdy release ominie pętlę for(int i = 0, i<1000;i++); bo stwierdzi że nic nie robi)
Jak nauczyć się pisać optymalny kod? Jak go przyspieszać? Skąd czerpaliście wiedzę?

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::string polymer;

    std::ifstream file("input.txt");
    if (file.is_open()) {
        while (file >> polymer);
        file.close();
    }

    long long iterations = 0;
    for (auto itr = polymer.begin(), buffor = polymer.begin() + 1; buffor != polymer.end(); ) {
        if ((*buffor + 32 == *itr) || *buffor - 32 == *itr) {
            polymer.erase(buffor);
            polymer.erase(itr);

            itr = polymer.begin();
            buffor = polymer.begin() + 1;
        }
        else { itr++, buffor++; };

        iterations++;
    }

    std::cout << iterations << std::endl;
    std::cout << polymer.size();

    std::cin.get();
}