我在没有备忘录的情况下完成了一些旧的试卷。我只是想确保我正确理解这一点。
提供模板类的接口
Dictionary <Tkey, TValue>
这是提供的方案
class Dictionary {
public:
Dictionary();
void Add(int key, const string &value);
string Find (int key) const;
private:
vector<int> Keys;
vector <string> Values;
};
这是我写下的解决方案
class Dictionary {
public:
Dictionary();
void Add(TKey key, const TValue &value);
TValue Find (TKey key) const;
private:
vector <Dictionary> Keys;
vector <Dictionary> Values;
};
这对我来说是正确的。我还没有为此编译驱动程序,因为我只想确保在模板类中正确理解这一点。
我认为只涉及向量的最后两行是我想确保我写得正确的。
感谢您抽出宝贵时间。
答案 0 :(得分:1)
您应该按照说明操作:
template<typename Tkey, typename TValue> // <<<<<<<<
class Dictionary {
public:
Dictionary();
void Add(TKey key, const TValue &value);
TValue Find (TKey key) const;
private:
vector <TKey> Keys; // <<<<<<<<
vector <TValue> Values; // <<<<<<<
};
甚至更好(因为很难将这些矢量成员恰当地联系起来):
template<typename Tkey, typename TValue> // <<<<<<<<
class Dictionary {
public:
Dictionary();
void Add(TKey key, const TValue &value);
TValue Find (TKey key) const;
private:
vector <std::pair<TKey,TValue>> dict; // <<<<<<<
};
答案 1 :(得分:1)
此转换不完整,略有不正确。
要使其完整,请确保该类实际上是一个类模板,即
template <typename TKey, typename TValue>
class Dictionary {
...
};
校正是使两个向量取值和值。目前,两个向量都设置为存储Dictionary
元素,这不是您所需要的:第一个向量应该包含TKey
元素,而第二个向量应该包含TValue
个。一旦您开始实施Dictionary<TKey,TValue>::Find
方法,您就会发现这个缺点。