Некоторые проблемы с алгоритмом объединения двух списков - PullRequest
0 голосов
/ 18 апреля 2019

У меня возникают проблемы при написании алгоритма объединения двух списков.

#include<iostream>
#include<vector>
using namespace std;
int main(){
    vector<int> list1,list2;
    int tmp;
    cin>>tmp;
    while(tmp!=-1){
        list1.push_back(tmp);
        cin>>tmp;
    }
    cin>>tmp;
    while(tmp!=-1){
        list2.push_back(tmp);
        cin>>tmp;
    }
    vector<int> list3(list1.size()+list2.size());
    vector<int>::iterator iter1=list1.begin();
    vector<int>::iterator iter2=list2.begin();
    while(iter1!=list1.end()&&iter2!=list2.end()){
        if(*iter1<*iter2){
            list3.push_back(*iter1);
            iter1++;
        }
        else{
            list3.push_back(*iter2);
            iter2++;
        }
    }
    while(iter1!=list1.end()){
        list3.push_back(*iter1);
        iter1++;
    }
    while(iter2!=list2.end()){
        list3.push_back(*iter2);
        iter2++;
    }
    if(list3.size()==0) cout<<"NULL";
    for(int i=0;i<list3.size();i++){
        cout<<list3[i];
        if(i!=list3.size()-1){
            cout<<" ";
        }
    }
    return 0;
}

консольный ввод:

1 3 5 -1

2 4 6 8 10 -1

ожидаемый результат на выходе: 1 2 3 4 5 6 8 10

фактический результат на выходе : 0 0 0 0 0 0 0 0 1 2 3 4 5 6 8 10

Ответы [ 3 ]

1 голос
/ 18 апреля 2019
vector<int> list3(list1.size()+list2.size());

должно быть

vector<int> list3;

Первый конструктор инициализирует вектор с N + M элементами, все инициализируются равными 0, а push_back добавляет больше элементов в конце.См. эту страницу для получения дополнительной информации о конструкторах std :: vector.

0 голосов
/ 18 апреля 2019

Линия

vector<int> list3(list1.size()+list2.size());

создает вектор типа int и вставляет list1.size()+list2.size() элементы по умолчанию. Вы хотите создать пустой вектор типа int и зарезервировать память для list1.size()+list2.size() элементов. Используйте

vector<int> list3;
list3.reserve(list1.size()+list2.size());
0 голосов
/ 18 апреля 2019

Замените vector<int> list3(list1.size()+list2.size());

на vector<int> list3;

Когда вы инициализируете Вектор размером X, у вас будет X элементов со значением 0. Затем вы используете list3.push_back(Y);который добавит элемент Y в конце вектора.Если вы объявляете пустой вектор и используете list3.push_back(Y);, у вас будет только один элемент Y в векторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...