C++ 向数组添加元素

Posted

技术标签:

【中文标题】C++ 向数组添加元素【英文标题】:C++ adding elements to an array 【发布时间】:2016-11-13 15:40:07 【问题描述】:

这是我的编程课作业的一部分。老师希望我们创建几个函数,其中一个可以将元素添加到现有的动态结构数组中,这就是我遇到的麻烦。

根据我在网上找到的不同帖子,这是我对函数应该如何工作的理解:

    创建一个比现有数组更大的新数组

    将旧数组的内容复制到新数组中

    将新元素添加到新数组中

    销毁旧数组

但是,出了点问题,程序崩溃了 - 我认为问题在于我尝试执行第 3 点和第 4 点的方式。有人可以看看吗?我真的很感激任何帮助。

编辑:忘了说,老师希望函数设置为 void,它们应该不返回任何东西。

代码如下:

const int size = 2;

struct Player 
    string name;
    string kind;
;

void addplayer(Player * plarr, int size) 

    cout << "Adding a new element to the array" << endl << endl;

    //creating a new, bigger array:
    Player * temp = NULL;
    temp = new Player[size+1];

    //copying the content of the old array
    for (int i=0;i<size;i++) 
        temp[i].name = plarr[i].name;
        temp[i].kind = plarr[i].kind;   
    

    //adding the new element:
    string name, kind;
    cout << "Choose the name for the new player: " << endl;
    cin >> name;
    cout << "Choose the class for the new player: " << endl;
    cin >> kind;

    temp[size+1].name = name;
    temp[size+1].kind = kind;

    //deleting the old array, replacing it with the new one
    delete[] plarr;     
    plarr = temp; 


【问题讨论】:

为什么不使用std::vector - 辛苦了! @EdHeal 老师禁止了,很遗憾 @EdHeal:对于动态分配的工作原理,这不会非常有指导意义吧? 不是你的问题,但从长远来看,如果你使用size_t 而不是int 作为数组大小,事情会更容易。它与 C++ 的其他部分更兼容。 还要看看 RAII。在这种情况下,您可以构建一个 Player_array 类来在销毁时自动管理和删除数组。 【参考方案1】:
void addplayer(Player * plarr, int size) 

plarr 参数按值传递

这个函数似乎分配了一个新数组并正确复制了内容,除了一个错误:

temp[size+1].name = name;
temp[size+1].kind = kind;

这里的索引应该是size。但最大的错误是函数的结尾是:

    delete[] plarr;     
    plarr = temp; 

不幸的是,由于plarr是按值传递的,所有这一切只是将这个函数的plarr参数设置为新指针,然后返回。

它什么也没做,因为这个函数的调用者仍然有它原来的指针。现在被销毁了。

您应该将此函数更改为 return 新指针,调用者需要保存它,而不是原来的指针。

【讨论】:

很遗憾,老师希望我们编写不返回任何内容的函数。换句话说,它们都应该有 void 类型 - 抱歉,我可能应该在我的问题中提到这一点 :( 非常感谢你的帮助! 如果 OP 返回新指针的值,则调用必须变为plarr = newPlayer(plarr, size++);。就个人而言,我会通过引用传递指针的大小,在函数中增加大小,所以声明是void newPlayer( Player*&amp;plarr, size_t &amp;size) 如果你不称职的老师想让你写出糟糕的代码,你唯一的选择就是通过引用而不是值来传递参数。 是的,通过引用有效,非常感谢大家!

以上是关于C++ 向数组添加元素的主要内容,如果未能解决你的问题,请参考以下文章

向字符串数组中的元素添加数字值

C#数组如何添加元素

向js数组中添加元素的3种方法

jquery怎样向数组里添加一个元素?还有...

Java 向数组中添加一个元素

如何向数组里添加元素