I am coming from a C#/Java background into C++, using visual studio community 2017 & plenty of tutorials. I came to the point where am unsure of what is a correct way to write a function to process a vector of data. Should I force a function to use a pointer / reference? Should I let compiler sort it out? What is best practice?
This is my main, I ask for an input on vector size, then pass a pointer to the integer value to function that creates and populates vector with values through a simple for loop. I then pass the array to another function that performs a shuffle.
vector<int> intVector(int* count)
{
    vector<int> vi;
    for (int i = 1; i <= *count; i++)
        vi.push_back(i);
    return vi;
}
vector<int> &randVector(vector<int> *v)
{
    shuffle(v->begin(), v->end(), default_random_engine());
    return *v;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int count;
    cout << "Enter vector array size: ";
    cin >> count; cout << endl;
    cout << "Vector of integers: " << endl;
    vector<int> vi = intVector(&count);
    for_each(vi.begin(), vi.end(), [](int i) {cout << i << " ";});
    cout << endl;
    vi = randVector(&vi);
    cout << "Randomized vector of integers: " << endl;
    for_each(vi.begin(), vi.end(), [](int i) {cout << i << " ";});
    cout << endl;
    return 0;
}
So my question is, what is the best practice in my case to avoid unnecessary copying. Should I even care about it? Should I rely on compiler to solve it for me?
I am planing to use C++ for game development on desktop and consoles. Understanding memory and performance management is important for me.
 
     
    