gpt4 book ai didi

c++ - 迭代器成员行为

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:06 26 4
gpt4 key购买 nike

我原以为下面的第二个断言会通过。我正在寻求你的帮助。

编辑:当我在所有地方使用 poss 而不是在某些地方使用 poss_a 时,它不起作用。

#include <vector>
#include <cassert>

class Sampler
{
public:
std::vector<int*> poss;
std::vector<int*>::const_iterator poss_it;
Sampler(std::vector<int*> poss_a) : poss(poss_a), poss_it(poss.begin())
{
assert( (poss[0]) == (*poss_it) ); //passes
}
};

int main()
{
int someInt;
std::vector<int*> poss_a(1, &someInt);
Sampler sampler(poss_a);
assert( ((sampler.poss)[0]) == (*(sampler.poss_it)) ); //passes now

return 0;
}

最佳答案

初始化列表中的 poss_it(poss.begin()) 行从 poss 中拉出一个迭代器,它是构造函数的输入,而不是类的一个字段。

这是一个范围问题。当您在构造函数中时,这很好,因为您的迭代器是指向函数输入的指针。然而,当您离开构造函数时,它指向内存中的同一个位置,但现在您不知道那个位置是什么。

您应该在构造函数中更改输入变量的名称。你想要一个这样做的:

Sampler(std::vector<int*> input) : poss(input), poss_it(poss.begin())

而您当前的操作是这样的:

Sampler(std::vector<int*> input) : poss(input), poss_it(input.begin())

关于c++ - 迭代器成员行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427416/

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