Условие:
Даны 3 списка с числами. Числа в списках не повторяются. Сами списки отсортированы. Необходимо реализовать метод GetNext, который бы обходил все 3 списка и выдавал числа в порядке возрастания. Объединять списки нельзя!
Примеры списков:
[List]: 1, 5, 12, 28, 31
[List]: 6, 9, 13
[List]: 3, 7, 10, 15
Вывод в этом случае должен быть таким:
GetNext << 1;
GetNext << 3;
GetNext << 5;
GetNext << 6;
GetNext << 7;
GetNext << 9;
и т.д.
Решение:
....
vector<vector<int>*> vectors;//тут хранятся наши списки
vector<int> vec1;
vector<int> vec2;
vector<int> vec3;//сами списки
....
vectors.push_back(&vec1);
vectors.push_back(&vec2);
vectors.push_back(&vec3);
vector<int> indexes(vectors.size(),0);//тут храним индекс элемента, который последний раз брали для каждого из списков
GetNext(indexes);
....
bool isExist(vector<int> &vec, int index)
{
return index < vec.size();
}
int GetNext( vector<int> &indexes)
{
int min = 0;
int index = -1;
for(int i=0;i<vectors.size();++i)
{
if(isExist(*vectors.at(i),indexes.at(i)))
{
min = vectors.at(i)->at(indexes.at(i));
index = i;
break;
}
}
if(index == -1)
throw exception();
for(int i=0;i<vectors.size();++i)
{
if(isExist(*vectors.at(i),indexes.at(i)))
{
if(vectors.at(i)->at(indexes.at(i))<min)
{
min = vectors.at(i)->at(indexes.at(i));
index = i;
}
}
}
indexes.at(index)++;
return vectors.at(index)->at(indexes.at(index)-1);
}