==如何在c++列表迭代器上工作
How == works on c++ list iterator?
我想知道,操作符==如何在list::迭代器上工作。我有一个指针列表(没有重复)和两个迭代器,它们应该指向该列表中的同一位置。当我用==(或!=)直接比较迭代器时,我得到了不等式,但当我比较它们指向的值时,我得到了相等。我也尝试了list.erase
,然后得到了相同的结果。
的例子:
list<VirtVertex *> blockList;
void initBlockList(){
/* somehow fill blockList */
for(auto it = blockList.begin(); it != blockList.end(); ++it)
(*it)->BLPosition = it;
}
for(auto it = blockList.begin(); it != blockList.end(); ++it){
if(it == (*it)->BLPosition)
cout << "OK"; //no "OK" printed
if(*it == *((*it)->BLPosition))
cout << "OK"; //got "OK" everytime
}
我想知道,operator ==是如何在list::iterator上工作的。
operator==
对list::iterator
的操作如您所期望的那样:如果迭代器指向列表中相同位置的相同元素,或者它们都是end
s,则返回true。
当我用==(或!=)直接比较迭代器时,我得到了不相等,但当我比较它们指向的值时,我得到了相等。
这是完全有效的,因为std::list
可以包含重复项。
如果两个迭代器指向同一容器的同一元素(或指向容器的末端),则它们比较相等。这对所有容器都是正确的,包括list
。
比较迭代器指向或引用的值与比较迭代器不同。对于像list
这样可以包含具有相同值的多个(重复)元素的容器,两个迭代器可以比较不相等的元素,但它们引用的值可以相同。显然,如果两个迭代器比较结果相等,并且它们不是end迭代器,则它们引用的值比较结果也相等(假设元素/类型具有适当的比较操作符)。
list.erase()
使list
的现有迭代器无效,因此使用先前获得的迭代器会产生未定义的行为。但是,随后从列表中获得的新迭代器将具有相同的属性。
相关文章:
- 使用std::multimap迭代器创建std::list
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 我的代码在作为参数传入 .begin() 时不起作用,但在我将 .begin() 转换为迭代器后工作
- cout 似乎在矢量迭代器C++中无法正常工作
- 为什么后缀失败并且前缀在传递迭代器作为参数并在尾部位置递归时工作正常
- iostream迭代器是如何工作的
- std::map迭代器是如何工作的
- std::迭代器的准备工作已弃用
- std::cin >>向量[i]不会让迭代器正常工作吗?
- 列表:<T>:迭代器无法正常工作
- 迭代器不是可取消引用的堆栈(表达式树)和循环无法正常工作
- 对不工作的wstring迭代器的输出进行相等比较
- 接受迭代器对的函数在并行运行时不工作
- ==如何在c++列表迭代器上工作
- std::map<t1, t2>::erase(迭代器位置)的工作?
- set中的迭代器是如何工作的
- 为什么set(c++)中的迭代器不能正常工作
- 迭代器究竟是如何工作的?(多项选择题)
- 用std::矢量迭代器分配std::字符串在一个项目中会导致调试错误,但在另一个项目却能正常工作
- 以基于迭代器的方式学习C++:这对获得背景很好,但对获得工作实用吗