This is a recurring problem with Mathematica graphics that generates many questions. I'm surprised it's not marked duplicate. In any case the Presentations Application, which I sell for $50, was initially designed to simplify all of this. The plot would be made in the following manner.
<< Presentations`
Draw2D[
{ContourDraw[x^2 + y^2, {x, -5, 5}, {y, -5, 5}],
Red,
Arrow[{{0, 0}, {1, 1}}]},
Frame -> True,
ImageSize -> 250]

You just draw one item after another. They are drawn in the order given. You can freely mix graphics items produced by plots and graphics primitives. Everything is a graphics primitive. The syntax of the various Draw statements is the same as the corresponding Mathematica Plot statement - except that only Options that affect the drawn primitives are used. Options that affect the overall graphic, such as Frame, ImageSize, AspectRatio ect., all go at the end. Options such as PlotPoints, MaxRecursion, ColorFunction would go in the ContourDraw statement. There is no need to combine separate plots with Show, or use Epilog, or use graphics level jumping to get primitives into plots.
I'm not certain why the posted second plot showed a Red arrow, but Red is nice so I used it.
Show
element, that is why there is/isn'tFrame
. Arrow is behindContourPlot
in firstShow
. $\endgroup$ContourShading->None
in theContourPlot
. $\endgroup$ContourShading -> Opacity[1/2]
, I'd bet. $\endgroup$