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

Why doesn't std::to_string support container classes as input?

本文关键字:输入 容器类 string std to 为什么 不支持      更新时间:2023-10-16

所以std::to_string适用于各种基元类型。但是,当尝试打印容器的元素(如矢量)时,我必须逐个元素遍历矢量元素并单独打印每个元素。现在,对于像向量这样的东西,这可以相当于一个语句或循环,如下所示:

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

但是对于其他容器类,格式化数据类型可能会很麻烦。

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

Vector 不知道如何将自定义类转换为字符串,除非自定义类提供字符串转换。现在,自定义类不需要提供字符串转换,因为它对该类的意义可能较小。

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

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

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