gpt4 book ai didi

使用 vector 推回和迭代器时出现 C++ 运行时错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:40:15 26 4
gpt4 key购买 nike

您好,我正在尝试解决一个算法问题,当我向在线法官提交代码时,我不断收到运行时错误。我不知道为什么会这样。这是我要解决的问题。 problem problem

代码如下。它适用于 visual studio 中的示例输入和输出。我还没有遇到不能正常工作或实际遇到运行时错误的输入和输出。只有在线判断给出了运行时错误,所以我不明白为什么。

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

int main()
{
int n;
int m;
int c1;
int c2;
cin >> n >> m >> c1 >> c2;
vector<int> p = {};
vector<int> q = {};
for (int i = 0; i < n; ++i)
{
int temp;
cin >> temp;
p.push_back(temp);
}
for (int i = 0; i < m; ++i)
{
int temp;
cin >> temp;
q.push_back(temp);
}
vector<int> distance = {};
for (int i = 0; i < p.size(); ++i)
{
for (int j = 0; j < q.size(); ++j)
{
distance.push_back(abs(p[i] - q[j]) + abs(c1 - c2));
}
}
sort(distance.begin(), distance.end());
int min = distance[0];
int count = 0;;
for (int i = 0; i < static_cast<int>(distance.size()); ++i)
{
if (distance[0] == distance[i])
count++;
else
break;
}
cout << min << " " << count << endl;
return 0;
}

最佳答案

如果 nm 都是最大允许值 500,000 那么距离将有 500,000 * 500,000将使用 1TB 内存的元素。由于 vector 随着您 push_back 的增长而增长,您实际上可能总共需要大约 2TB 的内存。估计网上的判断不允许你用这么多内存。

如果您重新考虑不存储距离值的算法,它可能会起作用。

如果您事先知道大小,您应该始终在 std::vector 上使用 reserve,因为它应该会导致 vector 分配正确数量的内存并避免随着 vector 的增长复制到新的内存块。

关于使用 vector 推回和迭代器时出现 C++ 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52549661/

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