我正在尝试制作一个200个整数的数组,并用100-299的整数填充。我目前有这个:
For Each line As String In lines
tab = line.Split(vbTab)
patientCounter += 1
dates = Date.Parse(line(3))
dateList.Add(dates)
'diseaseList.Add(line(4))
Dim disease As New disease(line(4))
diseaseList.Add(disease.ToString)
'diseaseList(line(4)).
For Each value In diseaseList
'If value.Equals(line(4)) Then disease.counter += 1
Next
Next
当我显示int myArray[200];
int j;
for(j = 100; j < 300; j++){
myArray[j] = j;
}
和myArray[0]
时,它会显示随机的垃圾数字,因此我知道我的数组无法正确填充。我还有另一个数组,它填充了0-99之间的myArray[200]
,并且可以正常工作。
答案 0 :(得分:6)
由于j
从100-299循环,所以myArray[j]
永远不会填满myArray
的元素0-99,并且在循环的后半段超出范围。
您要
for (j = 0; j < 200; j++)
{
myArray[j] = j+100;
}
答案 1 :(得分:3)
int myArray[200];
int j;
//when you say arr[j] with j = 200 for example and you array goes from 0 to 199 of course you will get an error
for(j = 100; j < 300; j++){
// you are confusing between index of the array you are trying to access & the the value to assign it
//with j-100 now it will go from 100-100=0 to 299-100=199
myArray[j-100] = j;
}
答案 2 :(得分:3)
其他答案已经证明了您的错误,但是我想展示一种使用std::iota
的替代方法:
{{1}}
答案 3 :(得分:2)
您的第一个数组索引从100开始而不是从0开始。 int myArray [200]表示索引从0到199。
答案 4 :(得分:2)
正如其他人所述,您的循环使用了错误的数组索引。无论数组中存储的是什么值,数组始终从索引0开始。
您可以(并且应该)使用标准算法来避免使用手动循环,从而避免此类陷阱。
例如std:::generate()
或std::generate_n()
:
#include <algorithm>
struct startAt
{
int num;
startAt(int start) : num(start) {}
int operator() ()
{
return num++;
}
}
std::generate(myArray, myArray+200, startAt(100));
or
std::generate_n(myArray, 200, startAt(100));
或者,如果使用的是C ++ 11或更高版本:
#include <array>
#include <algorithm>
std::array<int, 200> myArray;
std::generate(myArray,begin(), myArray.end(), [n = 100] () mutable { return n++; });
or
std::generate_n(myArray,begin(), 200, [n = 100] () mutable { return n++; });
或者,使用std::itoa()
代替:
#include <array>
#include <numeric>
std::array<int, 200> myArray;
std::iota(myArray.begin(), myArray.end(), 100);
答案 5 :(得分:0)
要用一系列数字填充原始数组,请在std::iota
和<numeric>
(都从{{1}开始)的帮助下,std::begin
(来自std::end
) })继续。
<iterator>
的使用方式与我们应用using ...
的方式相同,因此,如果有更好的std::swap
方法可用的专门技术,则可以选择正确的容器版本。因此,如果您决定将容器设为begin/end
或std::vector
,则无需过多或根本不需要修改代码。
std::array