прекращение вызова после выброса экземпляра 'std :: bad_alloc' с использованием строкового вектора и карты - PullRequest
0 голосов
/ 11 сентября 2018

Я пишу код cpp для ввода строковых записей, содержит имя и номер мобильного телефона (значения, разделенные пробелами), сохраняемые в карте.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;

void buildContactList(int n, map<string,string> &myMap);
void string_split(string,string*);

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    int n;
    string line="  1";
    vector<string> names;
    map<string,string> contactList;
    map<string,string> :: iterator it;
    cin>>n;    

    // build contact list for *n* entries
    buildContactList(n,contactList);

    // enter searching keywords, use space as a delimeter
    getline(cin>>ws,line);
    while(line != " "){     
        it = contactList.find(line);
        //if(it->second != " "){
            if(it == contactList.end()){                        
                names.push_back("Not found");
            }           
            else{
                line = line + "=" + it->second;
                names.push_back(line);
            }
        //}
        line="";
        getline(cin,line);      
    }
    if(names.size()>0){
        for (auto i = names.begin(); i != names.end(); ++i)
            cout << *i << endl;     
    }    
    return 0;
}

void buildContactList(int n, map<string,string> &myMap){
    string temp;
    //string::size_type sz;
    string arr[2]={""};
    for(size_t i=0;i<n;i++){        
        cin.clear();
        getline(cin>>ws,temp);      
        string_split(temp,arr);     
        //myMap[arr[0]] = stod(arr[1] , &sz);
        myMap[arr[0]] = arr[1];
        cin.clear();
    }
    return;
}

void string_split(string temp , string *arr){
    int a = temp.find(' ');
    arr[0] = temp.substr(0,a);
    arr[1] = temp.substr(a+1,10);
    //cout<< "arr[0]:"<<arr[0]<<"-------arr[1]:"<<arr[1]<<"------";
    return;
}
  • и затем поиск совпадения номера контакта
  • , если найден, сохраните его в векторе "names"
  • и, если запись не существует, push_back"not found"
  • и, наконец, распечатать его (вектор)

моя проблема в том, что код работает нормально с автономным компилятором g ++, но выдает ошибку bad_alloc при компиляциис компилятором хакерранка

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