簡體   English   中英

使用向量推回和迭代器時的c ++運行時錯誤

[英]c++ runtime error when using vectors push back and iterator

嗨,我正在嘗試解決算法問題,當我在線上提交代碼時,我一直遇到運行時錯誤。 我不知道為什么會這樣。 這是我要解決的問題。 問題問題

代碼如下。 它適用於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的內存。 由於向量隨着push_back增長而增長,實際上總共可能需要大約2TB的內存。 在線法官可能不允許您使用這么多的內存。

如果您重新考慮算法以不存儲距離值,則它可能會起作用。

如果事先知道大小,則應始終在std::vector上使用reserve ,因為這會導致vector恰好分配正確的內存量,並避免隨着vector的增長而復制到新的內存塊中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM