C'est correct oui. Il faut cependant bien penser que l'opérateur de manipulation des flots de sortie "<<" est seulement défini pour les types élémentaires. Ca implique donc que votre technique marchera du moment que les champs de votre struct sont de types élémentaires et non pas des objects/struct ou des références à ceux-ci.
Je ne suis pas sûr toutefois d'avoir compris votre seconde question. Si votre but est juste d'afficher les structures, pourquoi souhaitez vous faire un pushback ensuite? Si ce que vous entendez par là c'est comment faire pour l'initialisation du tableau, j'y verrai deux façons:
soit déclarer la struct à part dans une variable, puis push back cette variable:
struct MyStruct { int a; double b;};
vector <MyStruct> tab(0);
MyStruct m = {0, 2.0};
tab.push_back(m);
Soit vous passez directement la déclaration de la struct à push_back:
vector <MyStruct> tab(0);
tab.push_back({0, 2.0});
Chacune de ces solutions seraient considérées corrects.