Почему std :: to_string не поддерживает контейнерные классы в качестве входных данных? - PullRequest
0 голосов
/ 21 января 2019

Итак, std :: to_string работает с различными примитивными типами.Тем не менее, при попытке напечатать элементы контейнера, такие как вектор, мне приходится перебирать элемент вектора по элементам и печатать каждый из них по отдельности.Теперь, с чем-то вроде вектора, это может составить один оператор или цикл, подобный следующему:

for_each(v.begin(), v.end(), [](int x) {cout << x <<", "; });

, но с другими классами-контейнерами форматирование типа данных может быть довольно неприятным.

В отличие от языков, таких как Java или Python, есть функции, которые печатают большинство контейнеров в одном выражении.Почему STL не принимает их как аргументы в std :: to_string и не реализует to_string как функцию-член классов контейнеров?

1 Ответ

0 голосов
/ 21 января 2019

Vector не знает, как преобразовать пользовательский класс в строку, если пользовательские классы не обеспечивают преобразование строки. Теперь пользовательские классы не обязаны обеспечивать преобразование строк, потому что это может означать меньшее значение для этого класса.

Контейнеры в этом смысле очень общие. И, как вы указали, его очень легко реализовать. Очень типичный способ - перегрузить оператор << следующим образом:

ostream& operator<<(ostream& cout, const vector<int>& sorted)
{
  cout << "Array => ";
  for( auto i : sorted ) {
    cout << i << ", ";
  }
  cout << endl;
  return cout;
}

Или используйте stringstream класс или используйте for_each ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...