我在代码中实现了以下插入函数以及find函数
template <class Elem>
bool AList<Elem>::insert(const Elem& item)
{
if (listSize == maxSize) return false;
for (int i = listSize; i > fence; i--)
{
listArray[i] = listArray[i - 1];
}
listArray[fence + 1] = item;
listSize++;
return true;
}
bool find(const Elem& item)
{
for (int i = 0; i < getSize(); i++)
if (listArray[i].getCode() == item.getCode())
return true;
return false;
}
void print()
{
for (int i = 1; i < listSize; i++)
listArray[i].print();
}
void insertMajor(AList<Major> &t, Major &m)
{
if (t.find(m))
cout << "The major already exists!" << endl;
else
t.insert(m); //inserting major
}
然后我创建了一个班级专业的3个对象,并列出了这些专业,但是当我&#34; cout&#34;列表中,M1缺失。
AList<Major> list(5);
Major M1("ECE", "Electrical Engineering");
Major M2("CCE", "Computer Engineering");
Major M3("MATH", "Mathematics");
insertMajor(list, M1);
insertMajor(list, M2);
insertMajor(list, M3);
cout << "The list contains " << list.getSize() << " majors." << endl;
cout << "--------------- \n";
list.print();
cout << "--------------- \n";
输出:
The list contains 3 majors.
---------------
Major Code: MATH
Major Description: Mathematics
Major Code: CCE
Major Description: Computer Engineering
---------------
我试着找出为什么它似乎吞下了列表中的第一个元素,但我似乎无法弄明白。谁能开导我?
亲切的问候
答案 0 :(得分:1)
您打印功能从列表的索引1开始。
我很确定你的意思是 for (int i = 0; i < listSize; i++)
void print()
{
for (int i = 0; i < listSize; i++)
listArray[i].print();
}
答案 1 :(得分:1)
在print
中,你必须使用:
void print()
{
for (int i = 0; i < listSize; i++)
listArray[i].print();
}
或
void print()
{
for (int i = 1; i <= listSize; i++)
listArray[i].print();
}
否则,你会错过一个元素。
因为您指出未使用第一个元素。它被用作“围栏”,你需要使用:
void print()
{
for (int i = 1; i <= listSize; i++)
listArray[i].print();
}
然后,你需要改变:
for (int i = listSize; i > fence; i--)
{
listArray[i] = listArray[i - 1];
}
在insert
到
for (int i = listSize; i > fence; i--)
{
listArray[i+1] = listArray[i];
}