我正在为我的算法类实现抽象数据类型Map,并且我们被要求使用2个数组实现它。
我昨晚完成了实施,一切正常(当我们在线发送作业时,使用自动测试进行测试),并且它通过了每次测试。 然后我需要使用二进制搜索来实现它,我就这样做了。
今天早上,当我运行代码时,它给了我一个运行时错误,我认为我的复制构造函数是原因,因为当我评论它时,代码工作正常,但我的复制构造函数与我的导师实现它完全一样。
以下是崩溃的代码:
ArrayMap<string,string> m;
string s1("Sarajevo"), s2("Zagreb");
m[s1] = "BiH";
m[s2] = "Hrvatska";
{
ArrayMap<string,string> m2(m);
ArrayMap<string,string> m3;
m3=m;
m.empty(s1);
cout << m2.numOfElements() << " ";
cout << m2[s1] << " ";
cout << m3.numOfElements() << " ";
cout << m3[s1] << " ";
}
cout << m.numOfElements();
cout << " '" << m[s1] << "' ";
m.obrisi();
cout << m.numOfElements();
cout << " '" << m[s2] << "'";
这是构造函数:
ArrayMap(const NizMapa<TypeOfKey, TypeOfValue>& rhs){
_capacity = rhs._capacity;
_numOfElements = rhs._numOfElements;
_arrayK = new TypeOfKey[_capacity];
_arrayV = new TypeOfValue[_capacity];
for(int i = 0; i<_numOfElements; i++){
_arrayK[i] = rhs._arrayK[i];
_arrayV[i] = rhs._arrayV[i];
}
}
编辑:
SSCE
ArrayMap<string,string> m;
string s1("Sarajevo"), s2("Zagreb");
m[s1] = "BiH";
m[s2] = "Hrvatska";
ArrayMap<string,string> m2(m);
cout << m2[s1] << " " << m2.numOfElements();
/* When I do just this it works fine, but when combined with others it crashes the program*/
编辑:http://pastebin.com/vXdBTs4n 这是类实现: NizMapa是ArrayMap _kapacitet是_capacity _brojE是_numOfElements TipKljuca是TypeOfKey TipVrijednosti是TypeOfValue 方法: obrisi是空的/删除(2个版本)
注意:这不是二进制搜索版本,而是顺序搜索版本。如果需要任何其他信息,请询问,这很重要。 提前谢谢!
答案 0 :(得分:0)
您可以使用_capacity
_capacity = rhs._capacity;
_numOfElements = rhs._numOfElements;
_arrayK = new TypeOfKey[_capacity];
_arrayV = new TypeOfValue[_capacity];
在此处使用_numOfElements
for(int i = 0; i<_numOfElements; i++){
作为循环边界。所以这两个可能不匹配,如果_numOfElements
&gt;你正在超出数组边界。 _capacity
。