我正在使用一个循环来计算一个词被输入了多少次然后打印这个词以及它被输入了多少次,这有效但它从不打印最后一个词,我将它按字母顺序排序。在打印最后一个字之前,它会错误地指出迭代器不可取消引用。这是我的循环代码:
for (vector<string>::iterator it = v.begin() ; it != v.end(); ++it)
{
if (*it == *(it+1))
{
count++;
}
else if (*it != *(it+1))
{
count++;
cout << *it << " ---- " << count << endl;
count=0;
}
}
最佳答案
你的代码有未定义的行为 - 假设 it
指向 v
的最后一个元素,然后你试图取消引用 v.end()
*(it+1)
if (*it != *(it+1)
STL迭代器,end不指向最后一个元素; end() 返回一个迭代器,表示容器中元素的末尾。结尾是最后一个元素后面的位置。这样的迭代器也称为尾后迭代器。
因此,begin() 和 end() 定义了一个包含第一个元素但排除最后一个元素的半开范围
--------------------------------
| | | | | | | | |
--------------------------------
/\ /\
begin() end()
对于您要实现的目标,请查看 std::adjacent_find
auto it = std::adjacent_find(v.begin(), v.end());
if (it != v.end())
{
count ++;
}
else
{
cout << *it << " ---- " << count << endl;
}
关于c++ - vector 迭代器在 for 循环中不可取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636941/