【发布时间】:2018-02-23 06:09:42
【问题描述】:
我声明了一个向量和一个基本元素,这基本上意味着该插槽在我的头文件中是打开的:
template <typename K, typename V>
class Map_Hash
{
private:
vector<KeyValue<K,V>*> *hashTable;
KeyValue<K,V> *baseElt;
}
我在构造函数中实例化它们:
template <typename K, typename V>
Map_Hash<K,V>::Map_Hash(int M, K baseKey, V baseValue)
{
this->M = M;
baseElt = new KeyValue<K,V>(baseKey, baseValue);
hashTable = new vector<KeyValue<K,V>*>(M, baseElt);
}
现在,当我尝试向它们写入新值时,我会这样做:
template <typename K, typename V>
void Map_Hash<K,V>::add(K key)
{
KeyValue<K,V> elt(key);
int hashVal = getHashVal(elt);
(*(*hashTable)[hashVal]) = elt;
}
这里有更多的逻辑来处理表中已经存在的值,但我认为它可能只会挤满重要的东西。当(*(*hashTable)[hashVal]) = elt; 行被执行时,我的整个向量都被elt 覆盖,我想要的只是我提供的索引。还有发生了什么我真的不明白,但我的baseElt 也会被这个值覆盖。我确信这与我如何处理我对 c++ 新手的指针有关,因此非常感谢任何帮助。
【问题讨论】:
-
您不需要指针。摆脱他们。
-
由于这个声明
hashTable = new vector<KeyValue<K,V>*>(M, baseElt);,所有的向量元素都是指针,更具体地说是相同的指针,即baseElt。因此,当您为向量有效索引处的任何元素赋值时,所有向量元素(指针)都将指向相同的值。 -
@sameerkn 考虑将其发布为答案,因为您的评论几乎是答案......
-
停止无意义地使用指针。它使一切变得复杂。
标签: c++ c++11 pointers dereference