algorithm - 基本 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;
}
解决方案
推荐阅读
- python - 如何使用函数在 django 中复制 Meta 中差异很小的模型?
- android - 改进行列表视图的整体布局
- python - 自动格式化列表中的项目
- java - 为什么我的 updateAppWidget 方法不对所有操作做出反应?
- javascript - 为在 nativescript 事件中传递的 $event 获取“未定义” - IOS(N-Playground 测试)
- python - 使用“for 循环” - 如果用户输入中有重复的单词,则只显示第一个重复的单词。如何显示所有重复的单词?
- java - 代码没有输出期望值;如何修改它以获得预期的结果?
- javascript - 使用jquery进行简单的dom遍历
- dataset - 如何在特定的知识图中为 TransE 算法构建我自己的数据集
- android - 具有动态原始文件的媒体播放器