Why are you so worried about something that happens once?
The only trade off is that a vector allocates memory and an array doesn't. So it takes a bit more time, but uses very little stack. Further more, the used heap is parameterised.
The vector can allocate more space than it immediately needs (it's capacity), which allows non-trivial/expensive types to initialised only when required.
The count's just a number. How inefficient can it be?
I have no comment about the speed, but safe code is always better than fast code. Get something that works and is stable, then optimise. Don't optimise during the initial creation of your program unless it is absolutely necessary, and if you're a beginner working on beginner type programs and you're using a modern pc, that will not happen for a long time yet.
one exception is, if you know exactly how many elements you will have and it will not change over the run of the program, then you might want to allocate your own [] - obviously, it's up to you to clean-up memory allocations and to ensure that nothing gets added
but note that even in this case, you could use vector<>
if you really need to allocate a bunch of them, make sure that you cannot find a better alternative for organizing your data first - if you care about speed, making a lot of memory allocation calls (either directly or indirectly) could cost time
The vector has to maintain a count, just as you propose to do it manually. However, the vector is tested code so the count is really built into the object. The more things that you try to do manually, the more likely that you are going to introduce a defect. You've already stated that you are worried about creation, not element access, so I am not seeing any advantage in using a c-array. When you create your vector don't specify any size. Use the reserve member function to set the initial capacity. As long as it doesn't ever need to grow, you can insert and erase elements without any new memory allocations or deletions.