繁体   English   中英

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

[英]Why can't I print an vector's begin() iterator?

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

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

我知道我应该在c.begin()到 output 1 之前放一个* ,但是如果我不放指针符号,为什么std::cout会给我一个错误? 不应该只是output c的第一个元素的地址吗? 错误是“与运算符 << 不匹配”。

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

因为编译器不知道如何“打印” c.begin()类型的值。 但是让我们只阅读错误(GodBolt; using 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>而右侧有一个对应于 std::vector 的“普通迭代器”时,我不知道如何应用<<二元运算符

因此,即使std::vector<int>的迭代器可能是一个简单的int* - 情况也不一定如此:它可以是一些带有指针成员的 class 结构,或者是指向向量开头的指针和integer 偏移等。语言标准(AFAICR)不保证此实现细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM