Второй аргумент этого конструктора - это значение для инициализации. Прямо сейчас вы получаете 4 построенных по умолчанию вектора. Чтобы уточнить на более простом 1D примере:
// 4 ints initialized to 0
vector<int> v1(4);
// *exactly* the same as above, this is what the compiler ends up generating
vector<int> v2(4, 0);
// 4 ints initialized to 10
vector<int> v3(4, 10);
Итак, вы хотите:
vector< vector<int> > bar(4, vector<int>(4));
// this many ^ of these ^
При этом создается вектор векторов целых чисел, инициализированный так, чтобы он содержал 4 вектора, инициализируемый так, чтобы он содержал 4 целых числа, инициализируемый в 0. (При желании вы можете указать значение по умолчанию для int to.)
Полный рот, но не слишком жесткий. :)
Для пары:
typedef std::pair<int, int> pair_type; // be liberal in your use of typedef
typedef std::vector<pair_type> inner_vec;
typedef std::vector<inner_vec> outer_vec;
outer_vec v(5, inner_vec(5, pair_type(1, 1)); // 5x5 of pairs equal to (1, 1)
// this many ^ of these ^
//this many ^ of these ^