как объединить 2 отсортированных вектора без стандартного алгоритма? - PullRequest
0 голосов
/ 11 мая 2018

Вот мой код, он должен объединить 2 отсортированных vector s и сделать третий отсортированный vector.

Когда один из vector s пуст, код не работает, я думаючто первые два оператора if имеют некоторые проблемы.Это работает для непустых векторов, есть идеи, в чем проблема?

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void merge(vector<int>&v1, vector<int>&v2, vector<int>&v3) {
while (v1.size()!=0 && v2.size()!=0)
{
    if (v1.empty())
    {
        for (int i = 0; i < v2.size(); i++)
        {
            v3.push_back(v2[i]);
        }
        return;
    }

    if (v2.empty())
    {
        for (int i = 0; i < v1.size(); i++) {
            v3.push_back(v1[i]);
        }
        return;
    }

    if (v1[0] < v2[0])
    {
        v3.push_back(v1[0]);
        v1.erase(v1.begin());
    }
    else
    {
        v3.push_back(v2[0]);
        v2.erase(v2.begin());
    }
}
}
int main() 
{

vector<int> vec1;
vector<int> vec2{ 2,4,6,8,10,24,548,5454 };
vector<int>vec3;
merge(vec1, vec2, vec3);
for (auto v : vec3) cout << v << " ";
cout << "\n";
}

1 Ответ

0 голосов
/ 11 мая 2018

Измените:

while (v1.size()!=0 && v2.size()!=0)

На:

while (v1.size()!=0 || v2.size()!=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...