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();
}