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)
有什么问题?
类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)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |