Zużycie pamięci przez std::vector jest zazwyczaj pomijalnie większe niż tablicy. W absolutnie najgorszym przypadku zaalokuje 50-100% (zależnie od implementacji) więcej pamięci niż normalna tablica o tej samej pojemności (żeby umożliwić szybkie dodawanie elementów w przyszłości.) Dla dokładnej kontroli nad rozmiarem alokacji możesz użyć vector.reserve().
Możesz też użyć jednowymiarowego std::vector/tablicę i zamieniać koordynaty 2D na 1D (x, y -> vec[y*W+x]), co jest częstym rozwiązaniem i niesie trochę korzyści.