Если вы не собираетесь изменять вектор, вы обычно передаете его по константной ссылке.
void draw(const std::vector<T>& v)
{
for (int x = 0; x < v.size(); x++)
{
// draw v[x];
}
}
Вы также можете использовать итераторы (это часто предпочтительнее).
void draw(const std::vector<T>& v)
{
for (std::vector<T>::const_iterator x = v.begin(); x != v.end(); ++x)
{
// draw *x;
}
}
Причина, по которой вы не передаете его по значению (draw(std::vector<T> v)
), заключается в том, что это приведет к тому, что весь вектор будет копироваться при каждом вызове функции, что, очевидно, невероятно неэффективно. Ссылки означают, что вы просто ссылаетесь на существующий вектор, а не создаете новый.