为什么在C++中vector string对象不能直接输出,需要自己遍历,然后逐个输出.

 我来答
zjfaok
推荐于2017-09-24 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1560万
展开全部

一个原因是标准库不知道怎样才是最合适的输出方式,比如每个元素间要不要用回车分隔,还是用逗号分隔,再说即使不能直接输出,写起来也很简单,如果是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 作为字符串,最合适的输出方式就是一个字符一个字符输出。

但是如果是多个字符串(或者其他东西),就不知道什么是最合适的输出方式(如上,一个问题是用什么作为分隔符)

这不是能不能做到的问题,而是知不知道如何做的问题
kaixingui2012
2014-08-16 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6190万
展开全部
因为容器对象没有重载>>(输出)运算符!只有进行了运算符重载,才可以调用相应的类对象输出
追问

这个操作数类型是什么意思呢??<<std::vector<std::string

追答
就是指<<运算符所对应的操作数据类型!
如:
+运算符对应的数据类型可以是 int double等,string类对象重载了+运算符,也就可以进行+运算了,如:
string s("abc"), t;
t=s+"d" ;
cout << t <<endl ; //输出abcd
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
smallkhb
2014-08-16 · 超过46用户采纳过TA的回答
知道小有建树答主
回答量:88
采纳率:0%
帮助的人:76.5万
展开全部
ostream operator<<(ostream& o, string& s);
那是因为标准C++输出流只对string类型等基础数据类型做了运算符重载,如果你需要把一整个数组的字符串输出,你可以自己重载运算符,因为vector后面的类型是不确定的,所以标准库不会去做这件事情。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式