writing code has an element of art to it, yes. But code is converted to electrical currents that follow the rules of the universe, and in that regard, its a science. The computer system is a big system, to be sure, but it has fixed rules and your executable follows those rules.
The best way to improve is to write code. There are many, many style guides for c++, a lot of them are dated or even if still used, archaic in nature due to their age. Read several of them, look at code posted here that you think is GOOD code, and get a sense of what GOOD code looks like and try to emulate that. Keep what makes sense, discard what does not. When you get a job you will likely be TOLD how to write it, so anything you do on your own will have to adjust anyway, so just focus on a consistent, clean style for now.
One of the best places to start in c++ is to study the available <algorithms> and built in tools. The language does a lot for you that many languages need you to do for yourself, and these tools are debugged and efficiently coded (for the most part). What do these things do 'up front' is a starting place; but many algorithms have other uses. For example, a bucket sort is also a count of distinct values, or tan() is also the slope of the line, things like that. What can you make the tools do that is beyond their intended use? That is both art and science, but creativity is helpful.
I feel scientific technique is also important, and I often implement numerical algorithms (Computational geometry, image processing, or numerical analysis etc). These are so important and ordinarily should be improved (through reading papers, books).
(I like the book the Algorithm design manual to overview algorithms. If you know more books about powerful algorithms, I would appreciate it if you could tell me.)
But, I feel aspect of arts is also essential to realize the scientific techniques. I am sometimes bothered by my poor skills. Particularly, I wonder how to design software architecture, and "how to implement it" particularly for high performance analysis software.
High performance analysis software entails changes of methods, a large of validations.
Sometimes I feel design pattern, test techniques, automation techniques help me.
But, how to implement it is always difficult.
(I expect suitable codes found, but I could reach the best place)