c++ - vector 迭代器在 for 循环中不可取消引用

标签 c++ vector

我正在使用一个循环来计算一个词被输入了多少次然后打印这个词以及它被输入了多少次,这有效但它从不打印最后一个词,我将它按字母顺序排序。在打印最后一个字之前,它会错误地指出迭代器不可取消引用。这是我的循环代码:

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/

相关文章:

c++ - 如何从 C++ 中的资源文件加载游标组?

c++ - 模拟左键点击时黑屏

c++ - 在 C++ 中嵌入 Julia

arrays - 根据部分填充的向量形成 'partial' 单位矩阵

c++ - std::vector<char> 到 std::string

c++ - 无锁堆栈 : visibility issue when checking hazard pointers during pop()?

c++ - "class ClassName;"放在其他类定义的头文件中是什么意思?

c++ - vector<bool>::operator[] 行为不当?

python - 矢量模块中的点积

c++ - 从分配在堆栈上的对象指针 vector 中删除一个元素