Vectors, being arrays, are unable to hold differently-sized elements.
There are two possibilities in this case:
1. Use two vectors, one for each type: std::vector<int>/std::vector<std::string>
2. Use a vector that holds structures, each of which holds both types. std::vector<std::pair<int,std::string> > (note the space between the greater-than symbols. It's mandatory)
I don't know details of your program, but you may try to use a vector of pointers to some base class. Object stored in the vector should be of types derived from this base class. Additionally you may use some kind of smart pointer to make memory management easier (std::auto_ptr cannot be used since it does not have a proper = operator).
If you know the types at compile time and there are only a couple of them (by default variant supports up to 9
different types, IIRC).
Or
std::vector< boost::any >
If you only know the types at runtime, but then it becomes a bit of a problem extracting values, since in order
to get the value out of a boost::any you must any_cast<> it to the correct type. (If you get the type wrong,
any_cast will throw if casting to reference or return NULL if casting to pointer).