Hmm... there's another thing in your question that worried me. It is important to understand what the vector member function push_back() does.
It inserts a value into the vector. That is, it increments the size of your vector by 1 and places a new value in that new position.
Code:
vector<int> myV;
myV.push_back(12); //myV has 1 element.
cout << myV[0]; //outputs 12
myV.push_back(7) //myV has now 2 elements
cout << myV[1] //outputs 7
/*... and so forth ... */
So... when you declare a vector like so,
Code:
vector<int> myV(10);
You are declaring a vector of 10 elements. If declared inside a function (and main() is also a function), these elements are uninitialized. Which means they contain whatever garbage was on that location in memory.
When you subsequentely type,
You will be making your vector grow to 11 elements and the value 3 will be placed on this new position. (In arrays and containers, the back of an array is the last element, the front of an array is the first element)
So... I personally prefer my vectors to be declared without any elements (and empty vector just like I did on the first piece of code up there) and then use a loop to populate them with push_back(). I also hear this is best, since populating a vector with already defined dimensions is slower.
However, there are ways to initialize vectors with defined dimensions.
Code:
vector<int> myV(10, 0) //Will create a vector of 10 elements, each initialized to 0
vector<int> myV(anotherV) // Will create a vector that is an exact copy of the anotherV vector