C++ 不以 0 开头的循环
C++ Loops not starting with 0
所以,我一直在尝试创建一个简单的程序,只需要一个空数组和一个大小,并用从 1 到指定数字的数字填充它。
#include <iostream>
using namespace std;
int* fill(int empty[], int size) {
int i;
for (i = 1; i < size; i++) {
empty[i] = i;
}
return empty;
}
int main() {
int size;
cin >> size;
int* empty = new int[size];
fill(empty, size);
for (int i = 0; i < size; i++) {
cout << empty[i] << endl;
}
return 0;
}
所以,这就是我的代码。当 int i 在 fill() 方法中为 0 时,它工作得很好,但我想从 1 开始数字,当我这样做时,它看起来像这样:
-842150451
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
注意到它是如何用一个奇怪的负数替换 0 的吗?这是我输入"30"作为数组大小的时候。
当我将 i 的值设置为 0 时,它只是用 0 替换该负数。有没有办法只从一个开始数组?
谢谢。
您从索引 1 开始填充数组,然后从索引 0 开始输出它。 你期待什么?
有没有办法只从一个开始数组?
是的。 如果您需要size
元素,并且出于某种原因需要它们从索引 1 开始,那么您可以分配一个额外的元素:
int* empty = new int[size + 1];
现在,您在所有后续操作中忽略元素 0*。 您还可以迭代并包括size
:
for (i = 1; i <= size; i++) {
empty[i] = i;
}
- 但是,我仍然会将其初始化为某些内容。
我想警告你,如果你这样做只是因为你对零有一种非理性的恐惧,那么你应该克服这种恐惧,写出其他C++程序员可以理解的代码。 在没有充分理由的情况下从 1 开始数组是草率的,并且会惹恼任何阅读您的代码的人。
如果这只是您希望数字从 1 开始,但数组索引从零开始的问题,那就是另一回事了。 只需在填写时添加 1。
请注意,标准库中已经有一个函数。 它在<numeric>
中被称为std::iota
:
std::iota( empty, empty + size, 1 );
怎么样?
int* fill(int empty[], int size) {
int i;
for (i = 0; i < size; i++) {
empty[i] = i + 1; // one more than the index
}
return empty;
}
您需要将该值设置为比数组索引多 1。因此,数组索引从0 - size - 1
计数,而值 (i + 1
) 从1 - size
计数。
如果你想让数组中的数字开始,保持循环从0开始(因为C++中的数组是从零开始的),只需将值设置为i + 1
而不是简单地i
:
int* fill(int empty[], int size) {
int i;
for (i = 0; i < size; i++) {
empty[i] = i + 1;
}
return empty;
}
您应该知道数组的下标从 0
开始到 size - 1
。例如:
int a[10]; // The subscript is from a[0] to a[9]
如果你想有一个大小为sz
且下标从 1
开头的数组,你可以这样做
constexpr int sz = 10;
int a[sz + 1];
然后,只需使用从 1
到 sz
的下标范围并忽略0
。
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- 如何找到循环列表的开头?
- 循环回到z之后的字母表的开头
- cout 切断 for 循环中的字符串开头
- 在情况下,如何循环回到开关语句的开头
- 如何循环回到开关用例语句C++的开头
- C++ 不以 0 开头的循环
- 如何在c++中循环回到开头