Jeżeli chodzi Ci o alternatywę dla ręcznego alokowania pamięci przez operator new, to w takim wypadku możesz użyć vectora. Konkretnie, korzystając z odpowiedniego konstruktora do określenia rozmiaru tworzonego wektora. Więcej informacji tutaj: https://en.cppreference.com/w/cpp/container/vector/vector
Czyli na przykład:
#include <vector>
int main() {
std::vector<int> v(10);
for (int i = 0; i < 10; i++) {
v[i] = i;
}
}
Utworzysz sobie w ten sposób wektor dziesięciu intów (można dodatkowo je zainicjalizować jakąś wartością podawaną jako drugi argument).
Sprowadzając to do Twojego pytania, to możesz użyć std::vector<std::list<int>>, choć nie wiem na ile rzeczywiście o to Ci chodziło.
#include <vector>
#include <list>
int main() {
std::vector<std::list<int>> v(10);
for (int i = 0; i < 10; i++) {
v[i].push_back(i);
}
}
W tym kodzie konstruktory poszczególnych list powinny się wykonać i można używać takiego wektora list.