如何在没有循环的情况下用-1初始化整个数组

How to initialize whole array with -1 without loop

嘿,我正在尝试用 -1 初始化数组的所有元素。但问题是没有使用任何循环。

所以我搜索了网络,有人告诉我可以使用,

int *arr = new int[n]{-1};

但这只是将第一个元素分配给 -1。

所以,我的问题是如何分配,帮助我。

您可以像这样使用 std::fill

#include <iostream>
#include <algorithm>

int main() {
    int *arr = new int[10];
    std::fill(arr, arr + 10, -1);

    for (size_t i = 0; i < 10; i++) {
        std::cout << arr[i] << " ";
    }

    return 0;
}

甚至更好std::fill_n:

#include <iostream>
#include <algorithm>

int main() {
    int *arr = new int[10];
    std::fill_n(arr, 10, -1);

    for (size_t i = 0; i < 10; i++) {
        std::cout << arr[i] << " ";
    }

    return 0;
}

How to initialize whole array with -1 without loop

像这样:

int array[] = {
    -1,
    -1,
    -1,
    -1,
    -1,
    -1,
    -1,
    -1,
};

如果在编译时不知道大小,则必须使用循环 - 循环是否通过控制结构、goto(不要为此使用它)、递归或调用一个函数来实现做循环。您可以使用 std::fill_n 或其相关函数之一来避免自己编写循环,如 .

所示

如果事先知道数组的大小,可以在声明的时候填入:

#include <iostream>
int main(){
    int a[10] ={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};

    for (int i=0;i<10;i++)
        std::cout<< a[i] << std::endl;

    return 0;
}

如果您必须动态分配内存,使用 std::fill(来自@NutCracker 的回答)似乎是一个不错的选择。

当然如果你不想多次写-1是不可能的,但是我们可以不循环赋值(实际上,即使有循环我们也不能使用循环来初始化数组。)

警告:片段纯属娱乐,请勿当真。不用于任何实际用途

递归可以代替任何循环。这是一段真正没有任何循环的代码。

void fun(int* p, std::size_t n, std::size_t cur = 1u)
{
    *p = -1;
    if(n != cur) fun(p+1, n, cur+1)
}