所以我有一个这样的数组[1,2,3,4,5,6,7,8,9]
这个数组的最大值是15个值。如果我调用数字索引,我想要做的是插入一个int。所以说我从那里调用5是索引4,所有内容都会移位并插入新值[,1,2,3,4,0,5,6,7,8,9]
我将如何处理这个问题?
我尝试了这个,但我似乎无法正确地覆盖它的价值。 int xxx;
cin >> num;
if (num >= 0 && num <= 15) {
for (int i = num; i < MAX; i++) {
values[i] = values[i+1];
cout << values[i+1] << endl;
}
viewVal(values, position);
cout << endl << endl;
}
答案 0 :(得分:5)
问题是values[i] = values[i+1];
将值向左移一步(索引4现在具有索引6的值),但是您希望将所有值向右移动一步。因此,您必须撤消分配。
这会产生一个问题,即一旦将值移到右侧,右侧位置的前一个值就会丢失。为了防止这种情况,您可以从数组的后面开始。
答案 1 :(得分:1)
在C ++中无法更改普通数组的大小。我可以建议使用std::list
,它支持恒定时间插入。
#include <iostream>
#include <list>
#include <algorithm>
int main()
{
std::list<int> l{1, 2, 3, 4, 5, 6, 7, 8, 9};
int n;
std::cin >> n;
auto it = std::find(l.begin(), l.end(), n);
if(it != l.end())
{
l.insert(it, 0);
for(const auto& elem: l)
{
std::cout << elem << ' ';
}
std::cout << std::endl;
}
else
{
std::cout << "No such element" << std::endl;
}
return 0;
}
答案 2 :(得分:1)
希望这会有所帮助,这里所有元素首先向右移动,然后将新数字插入到数组中。
for(int i=(num-1);i<MAX;i++)
{
int temp=values[i];
values[i+1]=temp;
}
values[num-1]=0;