The compiler will basically interpret your code. Often, the compiler will be a subset of what is called an "environment". This environment will not only compile your code, but give you organizational options and give you the ability to easily debug codes or find errors. Technically, the compiler is all you will really need to run a code.
I'm going to give you a weak analogy, but I hope it helps anyway

.
Let's say C++ is a language just like English is. English has a set of words, defined by a dictionary, and C++ does as well. When we speak, it is you and I that interpret the language, but for computers it will be the compiler that does so. Computer languages have their own version of grammar which is generally called syntax. C++ will have a much more rigid form of syntax in comparison to English (which contains a lot of slang and geographical variance), but it is still the same thing. The compiler will understand the processes that you’ve coded, and if you’ve used something that it doesn’t understand, it will highlight it and tell you that something is wrong with it. Much like you might ask me what I mean about a certain part of this explanation. If I was using improper punctuation, and words that perhaps you didn’t understand, you would highlight them for me and ask me, hey dacruick, I don’t get this.
I want to emphasize that the C++ compiler is very rigid, as it is not a human. It expects a semi colon at the end of every line, and if it doesn’t get it then its going to complain. Humans on the other hand are able to fill in blanks and think on their feet. I hope this helps.
And as for a compiler, I used Bloodshed to compile for C++. I didn’t do too much work with it, so others on this forum might be able to direct you to a better compiler. Searching “Bloodshed C++” on google will give you all the hits you need.