合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

什里詹·阿里亚尔

我有一个 C++ 代码,它应该使用合并排序算法对一个包含 800,000 多个单词的文件进行排序,每个单词在一个新行上。

我做了什么 ?

首先,我尝试实现以下合并排序算法并尝试在一小部分输入上对其进行测试。我无法弄清楚我在哪里得到了向量的索引越界错误。如果有人能帮我解决这个问题,我将不胜感激

#include <fstream>
#include <iostream>
#include <vector>

using namespace std;


vector<string> merge(const vector<string>& first,
                     const vector<string>& second) {
    // Write your code to merge vectors first and
    // second onto result.

    vector<string> output;
    int i = 0;
    int j = 0 ;
    int size_first = sizeof(first);
    int size_second = sizeof(second);

    while(i < size_first || j < size_second){
        if (i < size_first && j < size_second){
            if (first.at(i) < second.at(j)){
                output.push_back(first.at(i));
                i++;
            }
            else{
                output.push_back(second.at(i));
                j++;
            }
        }
        else if (i < size_first){
            output.push_back(first.at(i));
            i++;
        }
        else{
            output.push_back(second.at(j));
            j++;
        }

    }
    return output;
}

void mergeSort(vector<string>& words) {
    if (words.size() <= 1)
    {
        return;
    }
    int n = words.size();
    int middle = n/2;

    vector<string> first_half(middle);
    for (int i = 0; i < middle; ++i) {
        first_half[i] = words[i];
    }

    vector<string> second_half(n - middle);
    for (int i = middle; i < n; ++i) {
        second_half[i - middle] = words[i];
    }

    words = merge(first_half, second_half);
}

void sort(vector<string>& words) {

    // Invoke mergeSort  here.
    mergeSort(words);
}

int main(){

    vector<string> names;
    names.push_back("Smith");
    names.push_back("Abinash");
    names.push_back("Ciara");
    names.push_back("Reeta");

    sort(names);

    return 0;

}
戴尔
  1. std::vector有一个size()成员函数,返回向量中元素的数量。sizeof(first)返回类型对象表示字节大小std::vector<string>,这不是您需要的。

     int size_first = sizeof(first);
     int size_second = sizeof(second);
    

    应该换成

     int size_first = first.size();
     int size_second = second.size();
    
  2. 你有一个错字:

    else {
        output.push_back(second.at(i));
        j++;
    }
    

    应该

        ...
        output.push_back(second.at(j))
    
  3. 还有一个。你忘记了主要的事情 -mergeSort在调用之前调用零件merge应该:

    mergeSort(first_half);
    mergeSort(second_half);
    words = merge(first_half, second_half);
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C++ 合并排序实现中抛出的 std::out_of_range 异常

来自分类Dev

以类型为std :: out_of_range的未捕获异常终止终止错误

来自分类Dev

C ++向量:std :: out_of_range错误

来自分类Dev

libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

来自分类Dev

Microsoft C ++异常:std :: out_of_range错误?

来自分类Dev

在C ++中抛出'std :: out_of_range'实例后调用终止

来自分类Dev

C ++中带有矢量的'std :: out_of_range'实例

来自分类Dev

我正在尝试使用c ++中的向量来实现(算法简介(CLRS))中的合并排序算法,但数组未排序,

来自分类Dev

异常'out_of_range'不是std的成员?

来自分类Dev

不会引发std :: out_of_range异常

来自分类Dev

不会引发std :: out_of_range异常

来自分类Dev

C ++:未处理的异常:内存位置处的std :: out_of_range

来自分类Dev

std :: stoi,std :: setbase和std :: out_of_range错误

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

C ++ std :: out_of_range在内存位置

来自分类Dev

错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

来自分类Dev

在C-.exe中的数组中合并排序算法未运行?

来自分类Dev

Mini-Project.exe中0x77031D4D的未处理异常:Microsoft C ++异常:内存位置0x00CFF620的std :: out_of_range

来自分类Dev

引发std :: out_of_range异常。“预期的类型说明符”

来自分类Dev

抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

来自分类Dev

获取out_of_range:C ++的向量错误,但无法弄清原因

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止

来自分类Dev

使用相同函数时意外收到“std::out_of_range”错误

来自分类Dev

以NSException错误类型的未捕获异常终止

来自分类Dev

在Swift 5中以NSException类型的未捕获异常终止

来自分类Dev

为什么我的out_of_range异常没有被捕获

Related 相关文章

  1. 1

    C++ 合并排序实现中抛出的 std::out_of_range 异常

  2. 2

    以类型为std :: out_of_range的未捕获异常终止终止错误

  3. 3

    C ++向量:std :: out_of_range错误

  4. 4

    libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

  5. 5

    Microsoft C ++异常:std :: out_of_range错误?

  6. 6

    在C ++中抛出'std :: out_of_range'实例后调用终止

  7. 7

    C ++中带有矢量的'std :: out_of_range'实例

  8. 8

    我正在尝试使用c ++中的向量来实现(算法简介(CLRS))中的合并排序算法,但数组未排序,

  9. 9

    异常'out_of_range'不是std的成员?

  10. 10

    不会引发std :: out_of_range异常

  11. 11

    不会引发std :: out_of_range异常

  12. 12

    C ++:未处理的异常:内存位置处的std :: out_of_range

  13. 13

    std :: stoi,std :: setbase和std :: out_of_range错误

  14. 14

    抛出'std :: out_of_range'实例后调用终止

  15. 15

    抛出'std :: out_of_range'实例后调用终止

  16. 16

    C ++ std :: out_of_range在内存位置

  17. 17

    错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

  18. 18

    在C-.exe中的数组中合并排序算法未运行?

  19. 19

    Mini-Project.exe中0x77031D4D的未处理异常:Microsoft C ++异常:内存位置0x00CFF620的std :: out_of_range

  20. 20

    引发std :: out_of_range异常。“预期的类型说明符”

  21. 21

    抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

  22. 22

    获取out_of_range:C ++的向量错误,但无法弄清原因

  23. 23

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  24. 24

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  25. 25

    将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止

  26. 26

    使用相同函数时意外收到“std::out_of_range”错误

  27. 27

    以NSException错误类型的未捕获异常终止

  28. 28

    在Swift 5中以NSException类型的未捕获异常终止

  29. 29

    为什么我的out_of_range异常没有被捕获

热门标签

归档