gpt4 book ai didi

c++ - 如何通过它的第 0 个位置引用解析这个 vector

转载 作者:太空狗 更新时间:2023-10-29 23:48:31 25 4
gpt4 key购买 nike

我正在尝试从第一个元素的引用中解析这个简单的数组。

这是我的代码:

#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;
}

关于c++ - 如何通过它的第 0 个位置引用解析这个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57874625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com