gpt4 book ai didi

c++ - std::find() 返回的迭代器不可取消引用

转载 作者:行者123 更新时间:2023-11-27 22:38:57 46 4
gpt4 key购买 nike

这是一个带有链接的 HashTable 实现的 insert() 函数。为了避免 linked_list 中的重复,我检查了一个值是否已经存在。如果是这样,那么我只是替换现有值,因为它几乎可以在评论“更新值”的末尾看到。该行发出异常,告诉我迭代器不可取消引用。为什么我不能解除对 std::find() 返回的迭代器的引用?是否有另一种方法来更新找到的值?

virtual void insert(const K& k, const V& v) {
auto index = hashFctn(k, m_table.capacity());
if (needsToGrow() || m_table[index].m_list.size() >= m_load_factor) {
rehash();
insert(k, v);
}
else {
auto it = std::find(m_table[index].m_list.begin(),
m_table[index].m_list.end(), v);
if (it != m_table[index].m_list.end()) { // if found add it
m_table[index].m_flag = flag::IN_USE;
m_table[index].m_key = k;
m_table[index].m_list.push_back(v);
m_nbrOfElements++;
} else {
*it = v; // update value if exists
}
}
}

最佳答案

你有

if (it != m_table[index].m_list.end()) { // if found add it
// Irrelevant...
} else {
*it = v; // update value if exists
}

如果迭代器 it 不是结束迭代器,您将执行一些不相关的操作。但在其他情况下,迭代器 it 等于结束迭代器,这是不可解引用的。然而你取消引用它。

我觉得条件应该相反,用==代替。

关于c++ - std::find() 返回的迭代器不可取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711982/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com