Вы не можете сделать это без временных, но вы можете сделать это более кратко:
mylist.push_back(std::list<int>(1, 0)); // insert 1 element with value 0
Как отмечает JonM, временный код, вероятно, будет оптимизирован любым достойным компилятором.
Вы можете использовать массивы:
int vals[] = { 1, 2, 3, 4 };
mylist.push_back(std::list<int>(vals, vals+sizeof(vals)/sizeof(vals[0])));
Утилиты, такие как Boost.Assign облегчить это:
mylist.push_back(boost::assign::list_of(1)(2)(3));
Производительность зависит от того, что вы хотите сделать, например, если вы хотите. ожидайте, что списки будут передаваться очень часто, используйте (желательно умные) указатели, чтобы избежать бесконечного копирования.