我正在为我的介绍性C ++类进行插入排序,它似乎正在工作,但我在排序列表中不断重复。
主要
Storage s;
for (int i = 0; i < 20000; ++i)
{
cout << "adding " << iss[i] << " to sorted list" << endl;
s.Add(iss[i]);
}
并在Storage.cpp中
void Storage::Add(int num)
{
it = mylist.begin();
if (mylist.empty())
{
Node tem(num);
mylist.push_front(tem);
}
else
{
while (it != mylist.end())
{
if (num < (*it).GetNumber())
{
Node temp(num);
mylist.insert(it, temp);
}
it++;
if (it == mylist.end())
{
Node te(num);
mylist.push_back(te);
}
}
}
it = mylist.begin();
while (it != mylist.end())
{
cout << (*it).GetNumber() << ',';
it++;
}
cout << endl << mylist.size() <<endl;
}
Node
只存储要添加到列表中的数字以及在Node
内计算的时间。
我无法弄清楚为什么我会重复,谢谢你的帮助。
答案 0 :(得分:1)
在while循环的第二个if条件中,总是在列表末尾添加一个导致重复的新节点。
答案 1 :(得分:1)
看看你的while循环。
while (it != mylist.end()) // Here
{
if (num < (*it).GetNumber()) // Here
{
Node temp(num);
mylist.insert(it, temp); // and here
}
it++;
if (it == mylist.end())
{
Node te(num);
mylist.push_back(te); // And here
}
你知道休息了吗?添加后继续循环,并在最后添加。
答案 2 :(得分:0)
我认为问题出现在这个循环中
while (it != mylist.end())
{
if (num < (*it).GetNumber())
{
Node temp(num);
mylist.insert(it, temp);
}
it++;
if (it == mylist.end())
{
Node te(num);
mylist.push_back(te);
}
}
如果列表中有一个元素,那么在它之后++迭代器将等于end(),你将添加一个新元素。之后,当前迭代器结束无效。 我会用以下方式重写它
while ( it != mylist.end() && !( num < (*it).GetNumber() ) ) it++;
Node temp( num );
if (it == mylist.end()) mylist.push_back(temp);
else mylist.insert(it, temp);