首页 > 解决方案 > 基本 k 方式合并:在抛出 'std::logic_error' 的实例后调用终止

问题描述

我正在尝试使用字符串来实现基本的合并 k 排序数组算法。我收到以下错误。

在抛出 'std::logic_error'
what() 的实例后调用终止:basic_string::_M_construct null 无效

如果names向量只有 2 个子向量,则代码可以正常工作,但是当我在names向量中添加另一个列表时,我得到了上述错误。

代码有什么问题?

#include <iostream>
#include <string>
#include <vector>
using namespace std;



vector<string> merge_2_names(vector<string> a, vector<string> b){
    int i = 0 ; int j = 0;
    vector<string> res; 
    
    while(i < a.size() && j < b.size()){
        if (a[i].compare(b[j]) < 0){
            res.push_back(a[i]);
            i++;
        }else{
            res.push_back(b[j]);
            j++;
        }
    }
    
    while (i < a.size()){
        res.push_back(a[i]);
        i++;
    }
    
    while(j < a.size()){
        res.push_back(b[j]);
        j++;
    }
    
    return res; 
}

vector<string> merge_k_names(vector<vector<string>> names){
    vector<string> result;
    
    cout << names.size() << "\n";
    
    for (string s: names[0]){
        result.push_back(s);
    }
    
    
    for(int i=1;i<names.size();i++) 
    { 
        result=merge_2_names(result,names[i]); 
    } 
    
    return result;
}

int main() {
    
    vector<vector<string>> names {{"adam" , "raja" , "zync"},
             {"edam" , "some" , "zian"},
             {"mike" , "jimm" , "pame"}};
             
    cout << names.size() << "\n";
             
    vector<string>  res = merge_k_names(names);
    
    for (string s: res){
        cout << s << " ";
    }
    
    return 0;
                            
} 

标签: algorithmsortingmergesortarray-merge

解决方案


推荐阅读