c++ - 如何通过它的第 0 个位置引用来解析这个向量
问题描述
我试图从它的第一个元素的引用中解析这个简单的数组。
这是我的代码:
#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 << " ";
}
}
但我收到此错误:
[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
有什么问题?
解决方案
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 << " ";
}
但是,在这种特殊情况下,您可以使用基于范围的 for 语句。
vector<int> vec3 { 1,2,3,4,5};
for ( const auto &item : vec3 )
{
cout << item << " ";
}
如果您确实想处理指针,那么循环可以通过以下方式查找
#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;
}
推荐阅读
- lazy-loading - IntesectionObserver API 在小屏幕上水平滚动时无法触发事件
- install4j - 将替换脚本用于语言代码时,不会设置安装程序变量 sys.languageId
- android - How to make tablayout fixed below action bar?
- vis.js - Eliptic looking graph
- python - How to install xapian with Python 3.6 on Ubuntu 16.04?
- javascript - D3.js 未在 Firefox 中显示
- javascript - 如何在单个html页面中拥有多个视频播放器
- raspberry-pi - 如何使用 Raspberry Pi 将一个屏幕一分为二?
- javascript - 使用 API 调用在刷新时反应路由器
- typescript - 如何删除 TS 中不相关的警告