I have an assignment to merge two sorted vectors into a third sorted vector. I’m sure the solution to this problem is pretty simple, but my brain is fried at the moment and could use your help.
Basically vectors A and B have a size of 3. They will hold integers such as 1, 2, 3 and 4, 5, 6 respectively. I can’t seem to get the syntax of my while loop correctly. I’ve tried making it a do/while loop, putting parentheses around the cases, and a few other things. It just doesn’t seem to be reading the part after the &&.
The first for loop just makes the R vector have the right size. And the second for loop just displays the values of the R vector. The result should print out from 1-6, but I’m only seeing 1-3.
Any help would be appreciated!
void::combine(vector<int> A, vector<int> B, vector<int> R) {
int ia = 0, ib = 0, ir = 0;
for (int i = 0; i < A.size() + B.size(); i++) {
R.push_back(0);
}
while (ia != A.size() && ib != B.size()) {
if (A[ia] < B[ib]) {
R[ir] = A[ia];
ia += 1;
}
else {
R[ir] = B[ib];
ib += 1;
}
ir += 1;
}
for (int i = 0; i < R.size(); i++) {
cout << "L3[" << i << "] = " << R[i] << endl;
}
}
First of all, this smells like a classic merge sort or a piece of it:
http://en.wikipedia.org/wiki/Merge_sort
The objective is to examine elements of the first vector, A, to elements of vector B, and append the elements to a resulting vector R, in order.
Thus if
A[i]<B[j], appendA[i]toR. Withstd::vector, there is no need to load the result vector with zeros before starting. Seestd::vector::push_back().The following is untested code:
Notice the difference between my function’s signature (parameters) and yours. I’m passing the source vectors as constant data and the result vector is passed by reference which enables my function to modify the caller’s result vector.
Also, I’m lazy and using the
std::vector::push_back()method. I believe this is more readable than assigning to an element in the result vector. Thepush_backmethod implies that I am appending to the vector. The assignment route may catch readers off-guard if they forget that a vector will expand in order resolve the assignment.