I have a existed class and function which look like this:
Class base_class{
...
}
void Func(...,vector &vec_b,...){
// inside
No. Even if an A is a B, a vector is not a vector.
To pass one in place of the other, you can pass a vector of pointers (or use a Boost ptr_vector). Alternatively, you may be able to use a template to allow passing a vector of anything that provides the right interface.
Either of these will require changing your function though -- there's essentially no way to avoid that (and still provide the functionality you want).