新人求问关于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是地址?? 那也应该可以输出吧?? 展开
#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是地址?? 那也应该可以输出吧?? 展开
2个回答
展开全部
解答你的几个疑问:
(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;
}
这样就可以了
希望对你有帮助
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询