Это во многом зависит от семантики этих int
с. Если они
Дискретные значения (скажем, результаты броска 1000 - 10000 десятисторонних
кости), то что-то вроде:
std::ostream&
operator<<( std::ostream& dest, std::vector<int> const& source )
{
dest << '[';
for ( std::vector<int>::const_iterator current = source.begin();
current != source.end();
++ current ) {
if ( current != source.begin() ) {
dest << ", ";
}
dest << *current;
}
dest << ']';
return dest;
}
может сделать трюк; Скорее всего, вы хотите забрать dest.width()
,
и установите его перед выводом каждого целого (или обработайте его как общее
ширину и определите, сколько отступов вам нужно на int
, и установите это
перед выводом каждого int), и вы также можете вставить строку
брейки.
Если, с другой стороны, ваш вектор является одним числом в базе 10, с
одна цифра на int
(в этом случае я бы рекомендовал использовать char
, а не
чем int), вы хотите что-то вроде:
std::ostream&
operator<<( std::ostream& dest, std::vector<int> const& source )
{
std::vector<int>::const_reverse_iterator current
= std::find_if( source.rbegin(), source.rend(),
boost::bind( std::not_equal_to<int>(), _1, 0 ) );
if ( current == source.rend() ) {
dest << '0';
} else {
while ( current != source.rend() ) {
dest << *current + '0';
++ current;
}
}
return dest;
}
(Это для представления с прямым порядком байтов; для bigendian замените
обратные итераторы с нормальными итераторами.)
Опять же, вы, вероятно, захотите обработать width()
и fill()
; обращение
база будет значительно сложнее.