旋转数组 - 错误

时间:2017-09-21 03:45:29

标签: c++

给定一个整数数组和一个整数K,任务是将数组的元素移动K.也就是说,给定A = [3 8 9 7 6],输出应为[9 7 6 3 8 ]。输出也需要是一个向量。

下面是我的代码,但它产生了一个seg错误!出了什么问题?

vector<int> solution(vector<int> &A, int K) {
    int sizeA = A.size();
    vector<int> B;
    for (int i = 0; i < sizeA; i++) {
        B[i] = A[(i+K) % sizeA];
    }
    return B;
}

感谢评论和回答,正确的代码是

vector<int> solution(vector<int> &A, int K) {
    int sizeA = A.size();
    vector<int> B(sizeA);
    for (int i = 0; i < sizeA; i++) {
        B[(i+K) % sizeA] = A[i];
    }
    return B;
}

3 个答案:

答案 0 :(得分:2)

您尝试索引B,但它只是默认构造,因此其大小为0并且索引任何元素都会产生未定义的行为。您可以使用正确的大小构建它,或者调整大小()以获得正确的大小,或者只使用push_back以正确的顺序将项目推入其中。或者您使用std::rotate将原始曲目旋转到位。

答案 1 :(得分:1)

你应该使用 vector(size_type n)来构建 B

vector<int> solution(vector<int> &A, int K) {
    int sizeA = A.size();
    //make a B of sizeA elements
    vector<int> B(sizeA);
    for (int i = 0; i < sizeA; i++) {
        B[i] = A[(i+K) % sizeA];
    }
    return B;
}

答案 2 :(得分:1)

B还没有初始化,所以索引它会给你一个错误。

而不是使用:

B[i] = A[(i+K) % sizeA];

使用:

B.push_back(A[(i+K) % sizeA]);