我原以为下面的第二个断言会通过。我正在寻求你的帮助。
编辑:当我在所有地方使用 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/