Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在数组中间插入值_C++ - Fatal编程技术网

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);iUse
std::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++。给你的代码是没有帮助的。你可以开始写一个函数,它可以将所有的值移到右边一个步骤。然后你可以更新这个函数,只移动数组的后缀。尝试实现小的步骤。