[英]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.