gpt4 book ai didi

c++ - 将迭代器的元素传递给函数 : wrong type of pointer

转载 作者:行者123 更新时间:2023-11-28 00:14:54 25 4
gpt4 key购买 nike

我正在尝试使用 C++ 解决 Project Euler 的问题 #3,以了解如何使用 C++ 迭代器。根据我在网上看到的例子,我可以使用取消引用的迭代器作为 cout 的参数。 ,它将成功打印元素。按照同样的逻辑,我应该能够将迭代器作为指针传递,因为它指向我想要的元素,但是这并没有像我相信的那样工作:

引用:http://www.cprogramming.com/tutorial/stl/iterators.html

在上面的链接(The STL approach (use this) 部分)中,作者使用

打印出他的 vector 元素

cout<<*myIntVectorIterator<<" ";

在我的代码中,我尝试将迭代器作为元素传递,但是它遇到了指针转换的问题:

 std::vector<long>::reverse_iterator it = factors.rbegin();                                                         
for (; it != factors.rend(); ++it) {
if(isPrime(it))
{
std::cout << *it << std::endl;
break;
}
return 0;

我收到指针转换错误:

错误:无法将参数“1”的“std::reverse_iterator<__gnu_cxx::__normal_iterator >> >”转换为“long int*”

将此指针显式转换为 long* if(isPrime((long *)*it))导致段错误。

我能得到这里发生了什么的解释吗?提前致谢。

最佳答案

首选选项:更改 isPrime 以获取 long(并将 *it 传递给它)。

第二个选项:传递 &*it 而不是 it

您的原始代码不起作用,因为 it 是一个迭代器(它是一个类),而函数需要 long int * 并且没有来自迭代器的隐式转换指向指针。

*it 在迭代器对象上调用重载的 operator* 并为存储 long 的内存位置提供一个指示符;所以你可以获取它的地址以获得指向该位置的指针。

关于c++ - 将迭代器的元素传递给函数 : wrong type of pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30990190/

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