为什么std :: to_string不支持容器类作为输入?

时间:2019-01-21 00:33:21

标签: c++ stl

因此std :: to_string适用于各种原始类型。但是,当尝试像矢量一样打印容器的元素时,我必须逐个元素遍历vector并分别打印。现在被授予,使用诸如矢量的东西,就等于一个语句或循环,如下所示:

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

,但是与其他容器类一起使用,格式化数据类型可能会很麻烦。

相反,Java或Python之类的语言具有可在单个语句中打印大多数容器的函数。为什么STL不接受这些作为std :: to_string中的参数,或者不实现to_string作为容器类的成员函数?

1 个答案:

答案 0 :(得分:2)

Vector不知道如何将自定义类转换为字符串,除非自定义类提供字符串转换。现在,不需要自定义类来提供字符串转换,因为这对于该类来说可能意味着更少的意义。

从这个意义上说,容器是非常通用的。 就像您指出的那样,它非常容易实现。非常典型的方法是如下重载<<运算符:

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

或者使用stringstream类或使用for_each ...