#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是地址?? 那也应该可以输出吧??
解答你的几个疑问:
(1)迭代器本身作为值,为啥不能打印?
答:迭代器在功能上可以看作是指向元素的指针。因为迭代器重载了*接引用操作符,->指针操作符。
但是,迭代器在实现上是一个类的对象。这个对象并不是一个地址,仅仅是一个对象。
cout能打印的对象类型是有限的,cout能打印的对象类型也是通过重载<<输出操作运算符来实现的,cout已经实现的都是些常见的基本类型:
__PURE_APPDOMAIN_GLOBAL extern ostream cout, *_Ptr_cout;
可以看出来,你的迭代器类型肯定没有实现,因为迭代器类型太多了,每个容器迭代器都是不同的类型,而且打印迭代器也没啥意义,所以也就没人去实现。
你如果真的想打印地址,可以打印迭代器的地址,可以用&地址操作符:
cout << &it << endl;
#include <iostream>这样就可以了
希望对你有帮助
c++:如何判断迭代器失效?
c++语言中,迭代器用于遍历容器中的元素。迭代器自身是不知道是否“失效”的,它仅是一个迭代对象的封装。当谈及迭代器“失效”,通常指的是在创建迭代开始时,迭代器预期迭代的元素序列就已经确定。若在迭代过程中,实际迭代序列与预期序列不同,便可能认为迭代器失效。不同容器的迭代器失效情况各异。...
c++ STL 迭代器失效问题
迭代器失效,有两个层面的意思,1) 无法通过迭代器++,--操作遍历整个stl容器。记作: 第一层失效。2) 无法通过迭代器存取迭代器所指向的内存。 记作: 第二层失效。关于这个问题, 不同的容器对应的结果是不同的。vector vector是个连续内存存储的容器,如果vector容器的中间某个元素被删除或从中间插入...
C++ String迭代器(Iterator)
C++ String的迭代器(Iterator)提供了操作字符串中的元素的便利性。主要的迭代器包括begin、end、rbegin和rend。其中:begin函数返回指向字符串开始处的迭代器。这意味着,通过将这个迭代器赋值给变量,用户可以遍历字符串中的每个字符。end函数返回一个指向字符串结束处之后的迭代器。这个迭代器在实际使用中...
C++一个类模板里使用迭代器的问题
编译器说的再清楚不过了 typedef list<HashedObj>::iterator Litr;'std::list<HashedObj>::iterator'前面要加'typename'指示这是一个类型的名字,因为 'std::list<HashedObj>'是dependent scope,不能自动判断其成员iterator是类型还是变量
c++iterator
C++中的iterator是一种抽象概念,用于遍历容器中的元素。它是一种类似于指针的对象,可以指向容器中的元素并进行访问和操作。通过迭代器,我们可以方便地对容器中的元素进行遍历、插入和删除等操作。一、迭代器的概念 在C++中,迭代器是一种模板类,它提供了一种通用的方式来访问和遍历容器中的元素。迭代...
C++ 迭代器遍历vector中的问题!!
不能,添加新的元素有可能导致迭代器失效
什么是C++的迭代器Interator?
迭代器的作用就相当于取出物品的工具的抽象,通过迭代器泛指现实生活中从贮藏室中取出物体的工具。C++迭代器是一种检查容器内元素并遍历元素的数据类型。1 Iterator definitionsIn C++, an iterator is any object that, pointing to some element in a range of elements (such as an array or a ...
C++:在遍历\/循环中删除map元素, 如何避免iter 迭代器失效
!!}} 看样子貌似非常正常的一 段代码。在一个map中寻找值为xxx的项并删除。但是实际上这个代码是完全错误的,会导致无法预料的结果。问题就在#1处。因 此就可以这样做(《C++Standard Library》上建议的正确做法):程序代码for(auto iter1 = theMap.begin(); iter1 != theMap.end(); ){if(...
有关C++ STL的两个问题(有关时间复杂度)
第一个问题:advance函数用在“随机访问迭代器”上时,时间复杂度是常数,即O(1)。所谓随机访问迭代器,简单地说就是该迭代器支持加法和减法操作符。比如,std::vector::iterator就是一种random access iterator,而std::list::iterator就不是。两者区别在于:如果你有一个vector::iterator,变量名是...
c++迭代器与指针。
迭代器直观点说就是一个指针,因为它重载了所有必须的指针操作符,比如++操作符。为什么要引入迭代器?因为你在调用algorithm.h里面的函数时,只是传进了几个参数,然后调用里面的方法。但是所有的容器都共用一个algorithm.h文件(除了特殊容器某些特殊原因需要自己定义自己的函数),这样的话站在松耦合、...