如何动态地初始化并将值逐个元素分配给数组
how to initialise and assign vlaue element by element to array dynamically
我想在 C++ 中逐个元素地为动态数组元素赋值。
我使用下面的代码来赋值
int *missedlst;
for(int i=0;i<10;i++){
missedlst = new int;
missedlst[i] = i;
}
如果我打印这些值,只有最后一个能正确显示。其余值不是:程序显示了一些垃圾值。
请帮助我在循环中逐个元素分配值。
您的代码完全按照您的指令执行
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;
你当前的代码,你分配了十个不同的"arrays",每次只有一个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
,然后你有三种方式来声明和初始化向量:
和你现在做的基本一样:
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
动态创建每个元素:
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
初始化向量 standard algorithm function std::iota
:
std::vector<int> missedLst(10); // Declare a vector of ten integers
std::iota(std::begin(missedLst), std::end(missedLst), 0);
我想在 C++ 中逐个元素地为动态数组元素赋值。 我使用下面的代码来赋值
int *missedlst;
for(int i=0;i<10;i++){
missedlst = new int;
missedlst[i] = i;
}
如果我打印这些值,只有最后一个能正确显示。其余值不是:程序显示了一些垃圾值。 请帮助我在循环中逐个元素分配值。
您的代码完全按照您的指令执行
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;
你当前的代码,你分配了十个不同的"arrays",每次只有一个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
,然后你有三种方式来声明和初始化向量:
和你现在做的基本一样:
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
动态创建每个元素:
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
初始化向量 standard algorithm function
std::iota
:std::vector<int> missedLst(10); // Declare a vector of ten integers std::iota(std::begin(missedLst), std::end(missedLst), 0);