如何通过其第0个位置参考解析此向量

Ash*_*h M 2 c++ iterator stl vector c++11

我试图从其第一个元素的引用中解析此简单数组。

这是我的代码:

#include <iostream>
#include <vector>
#include <algorithm>     

int main()
{
    vector<int> vec3 { 1,2,3,4,5};
    for( vector<int>::iterator ptr = &vec3[0]; ptr != vec3.end(); ++ptr )
    {
        cout << *ptr << " ";
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

[Error] conversion from '__gnu_cxx::__alloc_traits<std::allocator<int> >::value_type* {aka int*}' to non-scalar type 'std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >}' requested
Run Code Online (Sandbox Code Playgroud)

有什么问题?

Vla*_*cow 7

类std :: vector的迭代器不是必需的指针(尽管可以通过这种方式定义它们,并且实际上该类的某些旧实现std::vector将其迭代器定义为指针)。通常将它们定义为类。

并且编译器错误表明没有从类型value_type *到迭代器类型的隐式转换。

所以一般来说你必须写

vector<int> vec3 { 1,2,3,4,5};
for( vector<int>::iterator ptr = vec3.begin(); ptr != vec3.end(); ++ptr )
{
    cout << *ptr << " ";
}
Run Code Online (Sandbox Code Playgroud)

但是,在这种特殊情况下,您可以使用基于范围的for语句。

vector<int> vec3 { 1,2,3,4,5};
for ( const auto &item : vec3 )
{
    cout << item << " ";
}
Run Code Online (Sandbox Code Playgroud)

如果您确实要处理指针,那么循环可以例如通过以下方式查找

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> vec3 { 1, 2, 3, 4, 5 };

    for( auto ptr = vec3.data(); ptr != vec3.data() + vec3.size(); ++ptr )
    {
        std::cout << *ptr << ' ';
    }       

    std::cout << '\n';

    return 0;
}
Run Code Online (Sandbox Code Playgroud)