Хотя цель использования массива векторов весьма сомнительна (почему бы тогда не использовать вектор векторов или двумерный массив?), Чтобы сделать то, что вы хотите, правильный синтаксис будет выглядеть так:
std::vector<int> array[] = {
vector<int>(2),
vector<int>(3),
//...
vector<int>(1)
};
Причина, по которой это не имеет никакого смысла, заключается в том, что в данном случае это семантически аналогично созданию массива указателей:
int* array[] = {
new int[0],
new int[0],
//...
new int[0],
};
с той лишь разницей, что внутренне std :: vector самостоятельно управляет временем жизни этих указателей. Это означает, что если вы не создаете вектор постоянного размера (то есть без возможности перераспределения внутренней памяти вектора, что возможно, если вы либо объявляете вектор константным, либо просто убедитесь, что никогда не вызывайте resize, reserve, push_back, insert, erase и другие подобные методы), вы получите эффективный массив небольших объектов с указателем внутри. Так обычно реализуется вектор.
Непонятно, что вы подразумеваете под созданием массива во время компиляции. Массивы, объявленные так, как вы пытаетесь сделать, а также эти:
int fixed_size_array[100];
действительно созданы таким образом, что их размер определяется во время компиляции. Но векторы - это другое животное - это сложные объекты C ++, которые динамически управляют своей памятью во время выполнения, а это означает, что они просто не могут иметь заданный размер во время компиляции.