Data Structures, Algorithms, & Applications in C++
Chapter 5, Exercise 39
The code is given below and in the file
vectorListWithMerge.h. Test code is
included in vectorListWithMerge.cpp.
template<class T>
class vectorListWithMerge : public vectorList<T>
{
public:
// constructor and destructor
vectorListWithMerge(int initialCapacity = 10)
: vectorList<T> (initialCapacity) {}
void merge(const vectorListWithMerge<T>& a,
const vectorListWithMerge<T>& b);
};
template<class T>
void vectorListWithMerge<T>::merge(const vectorListWithMerge<T>& a,
const vectorListWithMerge<T>& b)
{// Make this the result of merging the sorted lists a and b.
vector<T>::iterator ia = a.element->begin(); // iterator for a
vector<T>::iterator aEnd = a.element->end();
vector<T>::iterator ib = b.element->begin(); // iterator for b
vector<T>::iterator bEnd = b.element->end();
element = new vector<T>;
// merge from a and b
while ((ia < aEnd) && (ib < bEnd))
if (*ia <= *ib)
{
element->push_back(*ia);
ia++;
}
else
{
element->push_back(*ib);
ib++;
}
// take care of left overs
element->insert(element->end(), ia, aEnd);
element->insert(element->end(), ib, bEnd);
}
The complexity of the method is O(a.listSize + b.listSize).