gpt4 book ai didi

c++ - vector::_M_range_check 异常

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:04 24 4
gpt4 key购买 nike

我想实现一些排序算法来比较它们,但我遇到了奇怪的异常。

这是我排序的代码:

//InsertionSort.hpp
#ifndef SORT_INSERTIONSORT_HPP
#define SORT_INSERTIONSORT_HPP

#include <vector>

class InsertionSort
{
public:
explicit InsertionSort(std::vector<int> v) : m_vector(std::move(v)){};
~InsertionSort() {};

std::vector<int> save() const;
void execute();

protected:
void sort();

private:
std::vector<int> m_vector;
};

#endif //SORT_INSERTIONSORT_HPP



//InsertionSort.cpp
#include <stddef.h>
#include "InsertionSort.hpp"

std::vector<int> InsertionSort::save() const
{
return m_vector;
}

void InsertionSort::execute()
{
sort();
}

void InsertionSort::sort()
{
int x;
size_t j;
for (size_t i = 1; i < m_vector.size(); ++i)
{
x = m_vector[i];
j = i;
while ((j > 0) && (m_vector[j - 1] > x))
{
m_vector[j] = m_vector[j - 1];
--j;
}
m_vector[j] = x;
}
}

和主要功能

#include <iostream>
#include <random>
#include <vector>
#include <chrono>
#include <memory>


#include "Sorting/InsertionSort.hpp"

int main()
{
/* random numbers generation */
std::mt19937_64 random(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> distribution(0, 1000);

std::vector<int> vec;
for(auto i = 0; i < 100; ++i)
{
vec.push_back(distribution(random));
}

/* actual sorting */
std::unique_ptr<InsertionSort> is(new InsertionSort(std::move(vec)));

is->execute();

auto result = is->save();
for(const auto &it : result)
{
try
{
std::cout << result.at(it) << " "; //here exception appears
} catch(std::out_of_range exc)
{
std::cout << exc.what() << std::endl;
}
}
std::cout << std::endl;

return 0;
}

当我尝试显示已排序的 vector 时,抛出异常。当我逐行调试这段代码时,vector 包含 100 个元素,直到我想要打印出 vector 内容的循环。

最佳答案

result.at(it) 将在 it 的索引处显示 vector 的元素。如果 it>=size() 那么 at() 将抛出异常。要打印出 vector 的内容,您可以使用

for(const auto &it : result)
{
std::cout << it << " ";
}

这将按照它们在 vector 中的顺序输出 vector 中的每个元素。

正如我在评论中提到的,您根本不需要在代码中使用 std::unique_ptr。你可以简单地使用

//...
InsertionSort is(std::move(vec));

is.execute();

auto result = is.save();
//...

关于c++ - vector::_M_range_check 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com