嗨我在Windows 10上有这种情况,它声明了空类成员变量向量,但是这个向量的begin()(first iterator)
和end()(last iterator)
不同,正如我在空向量中知道那些2应该是相同的。有任何想法吗? :)))
struct B
{
std::string a;
std::string b;
};
class A
{
A();
std::vector<B> vec_;
};
A::A()
{
}
此处的结构函数A vec_.begin().base()
不等于vec_.end().base()
据我所知,应该是平等的
答案 0 :(得分:3)
答案 1 :(得分:1)
std::vector<int> v;
assert(v.begin() == v.end());
这应该有效:开始和结束比较相等。
另一方面
auto b = v.begin();
auto e = v.end();
assert(&b == &e);
禁止工作:两个迭代器是不同的对象,必须有不同的地址。
比较等效物:
int i = 42;
int j = 42;
assert(i == j); // ok
assert(&i == &j); // fail
答案 2 :(得分:0)
迭代器按值返回,因此地址确实不一样。即使你这样做:
{{userHelper.uArr[taskData.tOwner]}}
const vector<whatever>::iterator &it1 = vect.begin();
const vector<whatever>::iterator &it2 = vect.begin();
和it1
的地址可以不同(并且将在许多实现中) - 即使使用了引用。
(请注意,在两者中使用it2
都不是错误 - 同样的方法begin()
将返回两个具有不同值的不同对象)