如何迭代一个数组,直到它被填充的位置没有遍历到全长
问题描述:
我喜欢将这个数组填充到只有[4]并且只想遍历到第四个位置而不是enire长度。如何迭代一个数组,直到它被填充的位置没有遍历到全长
int main()
{
int a[10],i,j=0;
cout<<"\nEnter 4 number :";
for(i=0;i<4;i++)
{
cin>>a[i];
}
while(a[j]!='\0')
{
cout<<a[j];
j++;
}
}
这个代码打印11号
答
答案是:你不能。数组没有像C风格的字符串终止。
数组具有固定大小,数组无法分辨您写入的元素数量。因此,如果您想为此使用数组,您必须使用广告代码来计算您写入的元素数量,即通过使用额外的变量进行计数。
像:
int a[10],i,j=0;
int valid_elements = 0;
cout<<"\nEnter 4 number :";
for(i=0;i<4;i++)
{
cin>>a[i];
++valid_elements;
}
for(i=0;i<valid_elements;i++)
{
cout<<a[i];
}
然而,这通常不是一个好方法。
一个更好的方法是一个向量,因为向量中元素的数量是动态的。你可以这样做:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> a;
int i, j;
cout<<"\nEnter 4 number :";
for(i=0;i<4;i++)
{
cin>>j;
a.push_back(j);
}
for (int x : a) // Range based for loop automatic iterates all elements in the vector
{
cout<<x;
}
return 0;
}
答
如果你可以使用一个特殊的值,比如零,以表示过去的结束的项目,方式'\0'
在C字符串使用,你可以初始化a
为全零后,用你的方法:
int a[10] = {0};
...
while (a[j]) {
cout << a[j++];
}
的缺点这种方法是在输入中结束标记变为无效。换句话说,如果最终用户在四个输入中输入一个零,打印将在打印少于四个项目后停止。
这就是为什么这两种方法都比较常见:
-
使用动态容器,如
std::vector<int>
- 这种方法只适用于C++ - 商店物品在一个单独的数变量 - 如果您必须使用“原始”数组,这种方法是最常见的。
首选'std :: vector'和'std :: array'为C风格的数组。 – Ron
'a [4]'中的值向上未初始化且不确定。你不能那样做。 –
你永远不会初始化你的数组为零,所以它包含随机数字。您终止值''\ 0'不需要您添加,它不会在那里。 – Galik