如何动态地按元素初始化和赋值元素

时间:2015-02-26 08:52:23

标签: c++ arrays dynamic-arrays

我想在C ++中按元素为动态数组元素赋值。 我使用下面的代码来分配值

int *missedlst;
for(int i=0;i<10;i++){
missedlst = new int;
missedlst[i] = i;
}

如果我打印值,则只显示最后一个值。其余值不是:程序显示一些垃圾值。 请帮我在循环中按元素分配值。

2 个答案:

答案 0 :(得分:2)

您当前的代码,您分配了十个不同的&#34;数组&#34;,每次只有一个int,但您写入此单元素数组的第i个元素,导致undefined behavior的其他地方(i为零时除外)。

要使当前代码正常工作,您需要重写,例如。

int* missedLst = new int[10];  // Create an array of ten integers
for (int i = 0; i < 10; ++i)
    missedLst[i] = i;  // Set the i'th element to the value of i

但是,我建议您改用std::vector,然后使用三种方式声明并初始化向量:

  1. 基本上和现在一样:

    std::vector<int> missedLst(10);  // Declare a vector of ten integers
    for (int i = 0; i < 10; ++i)
        missedLst[i] = i;  // Set the i'th element to the value of i
    
  2. 动态创建每个元素:

    std::vector<int> missedLst;  // Declare a vector of integers, size zero
    for (int i = 0; i < 10; ++i)
        missedLst.push_back(i);  // Add the value of i at the end
    
  3. 使用standard algorithm函数std::iota初始化向量:

    std::vector<int> missedLst(10);  // Declare a vector of ten integers
    std::iota(std::begin(missedLst), std::end(missedLst), 0);
    

答案 1 :(得分:1)

你的代码正在完成你告诉它的目的

int *missedlst;          // New pointer
for(int i=0;i<10;i++){   // Loop 10 times
    missedlst = new int; // Change what the pointer points to
    missedlst[i] = i;    // This makes no sense, you don't have an array
}

你想要的是创建一个新的整数数组,然后分配值。

int size = 10;                   // A size that is easily changed.
int* missedList = new int[size]; // New array of size size
for(int i = 0; i < size; ++i){   // loop size times
    missedList[i] = i;           // Assign the values
}

// Do stuff with your missedList

// Delete the object.
delete[] missedList;