基于数组的列表 - 插入函数

时间:2015-09-23 18:35:02

标签: c++ arraylist

我在代码中实现了以下插入函数以及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
--------------- 

我试着找出为什么它似乎吞下了列表中的第一个元素,但我似乎无法弄明白。谁能开导我?

亲切的问候

2 个答案:

答案 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];
}