c++ - 将大整数作为 vector 中的值传递时出现段错误

标签 c++ c++11 vector stl

传递大整数时出现段错误(核心已转储)。它适用于较小的输入。

long int替换了int,也尝试全局声明变量,但还是一样的错误。该函数用于执行多次右旋并返回给定索引处元素的值。这是函数:

    vector<long long int> circularArrayRotation(vector<long long int> a, long long int k, vector<long long int> queries) {
        vector <long long int> b;
        std::vector<long long int> result(queries.size());

        b=a;
        for(long long int j=0;j<k;j++)
        {
            for(long long int i=0;i<a.size();i++)
                a[i]=b[(a.size()+i-1)%a.size()];
            b=a;
        }

        for(long long int k=0;k<queries.size();k++)
            result[k]=a[queries[k]];
        for(long long int i=0;i<result.size();i++)
                cout<<result[i]<<endl;

        return result;

    }

其余代码可以在这里找到link

最佳答案

撇开实现质量不谈(不需要复制任何拷贝来旋转 vector ,它可以就地完成),导致段错误的错误很可能是在未显示的代码中。

要进一步调试,可以使用以下链接:

如果您需要进一步的帮助,请发布您的完整代码。

== 编辑 ==

您的代码没有触发段错误,而是触发了 HackerRank 上的“因超时而终止”错误。换句话说,您的解决方案太慢了。

那是因为不需要旋转任何东西来解决Circular Array Rotation :

vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
    vector<int> res;
    res.reserve(queries.size());
    int offset = k % a.size() - a.size();
    for (int i : queries) {
        res.push_back(a[(i - offset) % a.size()]);
    }
    return res;
}

即选择请求的元素时只需考虑旋转。

关于c++ - 将大整数作为 vector 中的值传递时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321506/

相关文章:

c++ - wxWidgets编译错误( fatal error LNK1120 : 26 unresolved externals)

c++ - std::scoped_allocator_adaptor 的目的是什么?

c++ - 如何理解 "std::future shared state"?

c++ - 将元素插入二维 vector C++

c++ - 标准对 vector 上的 clear 调用如何改变容量有什么看法?

c++ - 将格式从 c 语言更改为 c++

c++ - 为什么最负的 int 值会导致关于不明确的函数重载的错误?

c++ - C++11 (C++0x) 是完整的 C++03 超集吗?

c++ - 错误:预期在 ‘.’ token 之前的不合格 ID - std::vector

c++ - Boost.Preprocessor 是否可以实现二维序列?