The best way is to rely on neither and let the compiler do its work. It will generate the optimal copy constructor for you, unless you have special data members (yet to be seen). Then, and only then, would you have to worry about writing your own copy constructor (and you can use the member initialization as pointed out by @NathanOliver).
I know it's not your actual question, but closely related to it: if you want to use a regular constructor taking a vector argument, the best way is to use member initialization which will call the copy constructor of vector
(and your Standard Library will have written optimal code for that).
class A
{
public:
A(vector<something> const& v) : vs(v) {}
// let the compiler generate the copy constructor, UNLESS you have special data members members
A(A const& other): vs(other.vs) { /* e.g. deep copy or other special stuff */ }
private:
//a lot of things
vector<something> vs;
};