我想从数组中找到特定项目,然后移动数组以删除该项目。我有一个整数列表{1,2,3,4,5,6,7,8,9},并希望删除整数2。
目前我收到一条错误:“new_ints”的存储空间大小未知:
int new_ints[];
不确定这意味着什么或如何解决这个问题?
这是我的代码:
int main() {
int tmp = 2;
int valid_ints[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int new_ints[];
new_ints = stripList(tmp, valid_ints);
for (int i = 0; i < sizeof(new_ints); i++)
cout << new_ints[i] << endl;
return 0;
}
int *stripList (int tmp, int valid_ints[]){
for (int i = 0; i < sizeof(valid_ints); i++){
for (int j = tmp; j < sizeof(valid_ints); j++){
valid_ints[j] = valid_ints[j+1];
}
}
return valid_ints;
}
答案 0 :(得分:1)
c++
array
的大小必须在编译时知道。即int new_ints[]
是非法的。您需要具有定义的大小,即new_ints[10]
。 (有关详细信息,请参阅here)或者更好的是,利用c++
的优势并使用std::vector
。
答案 1 :(得分:1)
与Ben所说的一样,如果您想调整阵列大小以适应新元素,强烈建议使用矢量。
http://www.cplusplus.com/reference/vector/vector/vector/
这是我的例子:(注意你可以使用vector :: erase来删除不需要的元素)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> valid_ints;
vector<int> new_ints;
int tmp = 2;
//read in elements
for(int i = 1; i <= 9; i++)
{
valid_ints.push_back(i);
}
//valid_ints will hold {1,2,3,4,5,6,7,8,9}
for(int i = 0; i < valid_ints.size(); i++)
{
//We will add an element to new_ints from valid_ints everytime the valid_ints[i] is NOT tmp. (or 2.)
if(valid_ints[i] != tmp)
{
new_ints.push_back(valid_ints[i]);
}
}
//Print out the new ints
for(int i = 0; i < new_ints.size(); i++)
{
cout << new_ints[i] << ' ';
}
return 0;
}
生成的矢量将按以下顺序填充:
{1}
{1,3}(跳过2!)
{1,3,4}
{1,3,4,5}
等......直到
{1,3,4,5,6,7,8,9}
因此,输出结果为:
1 3 4 5 6 7 8 9