Использовать параметризацию потоков ввода/вывода. Можете например для вашей структуры завести метод либо перегрузку для вывода и в цикле для каждого элемента вызывать его/ее.
Чтобы вывести элемент структур в stdout, проще всего перегрузить оператор <<. класса std::ostream std::ostream& operator<<(std::ostream& out, const YouStruct& obj) {.....} В этой прегрузке, Вы можете написать любой удобный Вам формат вывода содержимого объекта структуры. Далее просто кидайте объект в cout() Вот мини пример : #include <vector> #include <iostream> namespace test { struct s { s(int a, double b, char c) : a(a), b(b), c(c) {} int a; double b; char c; }; std::ostream& operator<<(std::ostream& out, const s& obj) { out << obj.a << " " << obj.b << " " << obj.c; return out; } } int main() { std::vector<test::s> v{{1, 1.1, 'a'}, {2, 1.2, 'b'}, {3, 1.3, 'c'}}; for (const auto& val : v) { std::cout << val << std::endl; } return 0; } C #include <vector> #include <iostream> namespace test { struct s { s(int a, double b, char c) : a(a), b(b), c(c) {} int a; double b; char c; }; std::ostream& operator<<(std::ostream& out, const s& obj) { out << obj.a << " " << obj.b << " " << obj.c; return out; } } int main() { std::vector<test::s> v{{1, 1.1, 'a'}, {2, 1.2, 'b'}, {3, 1.3, 'c'}}; for (const auto& val : v) { std::cout << val << std::endl; } return 0; }
Leva63, А почему бы дружественную функцию не использовать, она бы обеспечила лучшую инкапсуляцию, в сравнении с пространством имен?