为什么我不能打印向量的 begin() 迭代器?



所以,我只是在学习向量,我有两个问题。第一个问题:

std::vector<int> c{1,2,3};
std::cout << c.begin();

我知道我应该在c.begin()之前放一个*来输出1,但如果我不放指针符号,为什么std::cout会给我一个错误?它不应该简单地输出c的第一个元素的地址吗?错误是";运算符<lt&";。

知道我应该把'*'放在c.begin((之前输出1,但如果我不放指针符号,为什么cout会给我一个错误?

因为编译器不知道如何"打印";CCD_ 4类型的值。但让我们读一下错误(GodBolt;使用GCC(,这是非常重要的:

<source>:10:15: error: invalid operands to binary expression ('std::ostream'
(aka 'basic_ostream<char>') and 'std::vector<int, std::allocator<int> >::iterator' 
(aka '__normal_iterator<int *, std::vector<int, std::allocator<int> > >'))
std::cout << c.begin();
~~~~~~~~~ ^  ~~~~~~~~~

换句话说:

当左边有basic_ostream<char>,右边有"0"时,我不知道如何应用<<二进制运算符;正常迭代器";对应于std::vector

因此,即使std::vector<int>的迭代器可能是一个简单的int*,但事实并非如此:它可以是具有指针成员的某个类结构,也可以是指向向量开头和整数偏移量的指针等。语言标准(AFAICR(不保证此实现细节。