我无法让我的代码获得 7 的步幅以正常工作 C++

I am unable to get my code to get the stride of 7 to work properly C++

我要解决的问题如下:

编写一个函数,遍历(并打印)stride = 7 的数组元素。为此,循环中的更新部分将是 i= (i+7) % n,其中 n 是数组大小。 这个函数会访问数组的所有元素吗?尝试不同的数组大小来检查何时无法遍历所有元素。

即使 i 的值正确,我在下面编写的代码也不会在数组中打印正确的值。

谁能帮忙,我将不胜感激。

#include <fstream>
#include <stdlib.h>

using namespace std;

int* CreateArray(int n);
void StrideArray(int arr[], int n);

int main()
{
    int* arr = new int[3];

    arr = CreateArray(3);

    cout << "The Elements In The Array Are: " << endl;
    for (int i = 0; i < 3; i++)
    {
        cout << arr[i] << "  ";
    }

    cout << endl;

    StrideArray(arr, 3);

    cout << "The Elements In The Array Stride 7 Are: " << endl;
    for (int i = 0; i < 3; i++)
    {
        cout << arr[i] << "  ";
    }

    delete[] arr;

    return 0;
}

int* CreateArray(int n)
{
    int* arr = new int[n];

    for (int i = 0; i < n; i++)
    {
        arr[i] = (rand() % 100);
    }

    return arr;
}

void StrideArray(int arr[], int n)
{
    int i = 0;

    for (int j = 0; j < n; j++)
    {
        i = (i + 7) % n;
        arr[j] = arr[i];
    }
}

问题是在 StrideArray 中你读回了 arr 的修改值。

void StrideArray(int arr[], int n)
{
    int i = 0;
    int puffer=new int[n];
    for (int j = 0; j < n; j++)
    {
        i = (i + 7) % n;
        puffer[j] = arr[i];
    }
    for (int j = 0; j < n; j++){
        puffer[j] = arr[j];
    }
    debete[] puffer;
}

是写函数的好方法。

此外,只有当 n 不能被 7 整除时,它才会访问所有元素。所以如果 n 不是 7,14,21,...

要使用 cout,您还必须 #include <iostream>

您的 StrideArray 函数需要修复;您正在迭代 j 但使用 i 进行索引,它保持不变;并且您正在将一个索引的值重新分配给另一个您应该打印它的地方:

void StrideArray(int arr[], int n)
{
    int i = 0;

    for (int j = 0; j < n; j=j+7)
    {
        cout << arr[j] << endl;
    }
}

我为演示修改了您的其余代码:

#include <iostream>
#include <stdlib.h>

using namespace std;

int* CreateArray(int n);
void StrideArray(int arr[], int n);

int main()
{
    int* arr = new int[3];

    arr = CreateArray(21);

    cout << "The Elements In The Array Are: " << endl;
    for (int i = 0; i < 21; i++)
    {
        cout << arr[i] << "  ";
    }

    cout << endl;

    StrideArray(arr, 21);


    delete[] arr;

    return 0;
}

int* CreateArray(int n)
{
    int* arr = new int[n];

    for (int i = 0; i < n; i++)
    {
        arr[i] = (rand() % 100);
    }

    return arr;
}