为什么在C++中vector string对象不能直接输出,需要自己遍历,然后逐个输出.
展开全部
一个原因是标准库不知道怎样才是最合适的输出方式,比如每个元素间要不要用回车分隔,还是用逗号分隔,再说即使不能直接输出,写起来也很简单,如果是C++11的话,写成
for (auto&& i:text) cout << i <<' ';
就可以了
真的需要cout << text;这种写法的话,自己重载一个 operator<< 函数也是很轻松的事,因为你自己知道怎样输出最合适,以下就是在不用C++11的情况下,一个简单且可扩展的 operator<< 重载
std::ostream& operator<<(std::ostream& o, std::vector<std::string> const& v)
{
for (std::vector<std::string>::iterator i=v.begin(), end=v.end();
i != end;
++i)
o << *i << ' ';
}
追问
还没学到重载运算符。
标准库没有办法输出模版中的string对象??是因为模版里的stiring对象有什么特性吗?????
追答
标准库当然能输出string,哪怕是模板类的string成员,因为 string 作为字符串,最合适的输出方式就是一个字符一个字符输出。
但是如果是多个字符串(或者其他东西),就不知道什么是最合适的输出方式(如上,一个问题是用什么作为分隔符)
这不是能不能做到的问题,而是知不知道如何做的问题
展开全部
ostream operator<<(ostream& o, string& s);
那是因为标准C++输出流只对string类型等基础数据类型做了运算符重载,如果你需要把一整个数组的字符串输出,你可以自己重载运算符,因为vector后面的类型是不确定的,所以标准库不会去做这件事情。。。
那是因为标准C++输出流只对string类型等基础数据类型做了运算符重载,如果你需要把一整个数组的字符串输出,你可以自己重载运算符,因为vector后面的类型是不确定的,所以标准库不会去做这件事情。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询