新人求问关于c++迭代器问题

#include<iostream>#include<string>#include<cctype>#include<vector>usingstd::vector;us... #include <iostream>
#include <string>
#include <cctype>
#include <vector>
using std::vector;
using namespace std;

int main()
{
string str{ "World" };
if (str.begin() != str.end())
{
auto it = str.begin();
cout << it << endl;
}
return 0;
}

这段输出World的第一个字母
但是为什么无法输出it 必须要*it
难道it是地址?? 那也应该可以输出吧??
展开
 我来答
carea
2017-01-02 · TA获得超过459个赞
知道小有建树答主
回答量:395
采纳率:65%
帮助的人:106万
展开全部

解答你的几个疑问:

(1)迭代器本身作为值,为啥不能打印?

答:迭代器在功能上可以看作是指向元素的指针。因为迭代器重载了*接引用操作符,->指针操作符。

但是,迭代器在实现上是一个类的对象。这个对象并不是一个地址,仅仅是一个对象。

cout能打印的对象类型是有限的,cout能打印的对象类型也是通过重载<<输出操作运算符来实现的,cout已经实现的都是些常见的基本类型:

__PURE_APPDOMAIN_GLOBAL extern ostream cout, *_Ptr_cout;

可以看出来,你的迭代器类型肯定没有实现,因为迭代器类型太多了,每个容器迭代器都是不同的类型,而且打印迭代器也没啥意义,所以也就没人去实现。

你如果真的想打印地址,可以打印迭代器的地址,可以用&地址操作符:

cout << &it << endl;

#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using std::vector;
using namespace std;

int main()
{
string str("World");
if (str.begin() != str.end())
{
auto it = str.begin();
cout << &it << endl;
}
return 0;
}

这样就可以了

希望对你有帮助

Dcltype
2017-01-02 · TA获得超过352个赞
知道小有建树答主
回答量:350
采纳率:0%
帮助的人:215万
展开全部
it不是地址,是string类中的内部类iterator的一个实例对象
要想输出it,必须在string::iterator类中重载<<运算符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式