如何在没有循环的情况下用-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)
}
嘿,我正在尝试用 -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)
}