c++ - 迭代器成员行为

标签 c++ class pointers stl iterator

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

编辑:当我在所有地方使用 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/

相关文章:

php - 如何在 PHP 中获取特定类的实例?

c++ - 需要改变的东西

c - 在 C 中声明指针类型的参数时使用 `const`

c - 如何为 typedef 结构正确分配内存

c++ - 对象数组作为 C++ 中函数错误的参数

非模板类中任意类型的C++成员变量

C++ 方法仅与返回类型(和 const)的 'constness' 不同

c++ - 进入智能指针,如何处理代表所有权?

c++ - 访问 DSN 有哪些访问限制

c++ - 我们如何使用 boost::mpl 实现 Builder 设计模式?