C++ 如何在数组中间插入值
我有一个类似这样的数组C++ 如何在数组中间插入值,c++,C++,我有一个类似这样的数组[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; 如果(num >=0 & & num < p>)在C++中改变普通数组的大小是不可能的。我建议使用 STD::列表< /C> >,它支持常数时间插入。 #
[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;
如果(num >=0 & & num < p>)在C++中改变普通数组的大小是不可能的。我建议使用<代码> STD::列表< /C> >,它支持常数时间插入。
#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;
}
#包括
#包括
#包括
int main()
{
列表l{1,2,3,4,5,6,7,8,9};
int n;
标准:cin>>n;
auto it=std::find(l.begin(),l.end(),n);
如果(it!=l.end())
{
l、 插入(it,0);
用于(常量自动和元素:l)
{
Std::CUT< P>改变普通数组的大小在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;
}
#包括
#包括
#包括
int main()
{
列表l{1,2,3,4,5,6,7,8,9};
int n;
标准:cin>>n;
auto it=std::find(l.begin(),l.end(),n);
如果(it!=l.end())
{
l、 插入(it,0);
用于(常量自动和元素:l)
{
std::cout问题是values[i]=values[i+1];
将一个值向左移动一步(索引4现在的值为索引6),但您希望将所有值向右移动一步。因此,您必须反转赋值
这就产生了一个问题,即一旦将一个值向右移动,右边位置上以前的值就会丢失。为了防止这种情况,可以从数组的后面开始。问题是values[i]=values[i+1];
将一个值向左移动一步(索引4现在的值为索引6),但您希望将所有值向右移动一步。因此,您必须反转赋值
这就产生了一个问题,即一旦将一个值移到右侧,右侧位置上的上一个值就会丢失。为了防止出现这种情况,您可以从数组的后面开始操作。希望这会有所帮助,首先将所有元素移到右侧,然后将新数字插入数组中
for(int i=(num-1);i<MAX;i++)
{
int temp=values[i];
values[i+1]=temp;
}
values[num-1]=0;
for(inti=(num-1);我希望这会有所帮助,这里所有的元素首先向右移位,然后将新的数字插入数组中
for(int i=(num-1);i<MAX;i++)
{
int temp=values[i];
values[i+1]=temp;
}
values[num-1]=0;
for(int i=(num-1);iUsestd::vector
而不是数组,你可以用insert
@us2012轻松地完成这项工作。我正在编写一本书,所以我必须按照它所说的去做。我希望我可以这样做:(你为什么要按照书上说的去做呢?us2012的评论是你在编写软件时应该做的。@dornhege我也喜欢,但这是一个类,而不是我们正在学习的东西使用std::vector
而不是数组,你可以通过insert
@us2012轻松地做到这一点。我在写一本书,所以我必须遵循什么上面写着。我希望我能这样做:(你为什么要按照书中的说法去做呢?us2012的评论是你在编写软件时应该做的。@dornhege我也希望这样,但这是为了一个类,而不是我们正在学习的std::vector
在这种情况下会更快。只有当你需要插入和删除没有无效的迭代器。@很快,如果数组只有3个值,最大值为20,我不能将其移位,然后添加新值吗?@Mr.1.0,当然可以。但如果要添加超过17个元素,则必须增加大小(重新分配内存)数组的。std::vector
在这种情况下会更快。std::list
唯一合适的时间是当您需要能够插入和删除而不使迭代器失效时。@很快,如果数组只有3个值,最大值为20,我不能将其移位,然后添加新值吗?@Mr.1.0,当然可以。但是如果您想添加迭代器,可以超过17个元素,您必须增加数组的大小(重新分配内存)。不起作用。输入索引,然后将所有其他元素都转换为相同的数字。对此,i的初始值为num,这就是它失败的原因…我已将其替换为(num-1),这将起作用。输入索引,然后将其他所有内容都转换为相同的数字对不起,i的初始值是num,这就是它失败的原因…我已将其替换为(num-1)你可以给我看一个例子吗?我故意不显示任何代码,因为显然你正在学习C++。给你的代码是没有帮助的。你可以开始写一个函数,它可以将所有的值移到右边一个步骤。然后你可以更新这个函数,只移动数组的后缀。尝试实现小。步骤。你能给我举个例子吗?我故意不显示任何代码,因为显然你正在学习C++。给你的代码是没有帮助的。你可以开始写一个函数,它可以将所有的值移到右边一个步骤。然后你可以更新这个函数,只移动数组的后缀。尝试实现小的步骤。