将数字100-299加到数组

时间:2019-02-13 20:54:50

标签: c++ arrays

我正在尝试制作一个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],并且可以正常工作。

6 个答案:

答案 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/endstd::vector,则无需过多或根本不需要修改代码。

std::array