微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基本 k 方式合并:在抛出“std::logic_error”实例后调用终止

如何解决基本 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;
                            
} 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。