Well, given a vector<T> named v, you might write:
Code:
v.push_back(T(1, args));
v.push_back(T(2, args));
// etc
v.push_back(T(20, args));
and thus populate the vector with those 20 objects. If they are all (initially) the same as you create the vector, you could just write:
Code:
vector<T> v(20, T(whatever, args));
As for your users creating objects: when your user performs some action to add a book to the library, your program then correspondingly uses push_back on the vector. The user himself/herself should be thinking "adding a book to the library", not "adding a book object to a vector".